Innehållsskapande kan vara en av de mest tidskrävande delarna av spelutveckling, varför bygga en nivåredigerare kan vara så användbar. I den här artikeln delar jag mina tips för att skapa en effektiv nivåredigerare och förklara hur användningen av det här verktyget har ökat mitt arbetsflöde.
Här är scenariot: du har spenderat månader på ditt spel och det börjar äntligen komma ihop. Codebase är stark, och du har kommit till den punkt där du kan börja skapa nivåer för ditt spel.
Det finns bara ett problem - din nivåfil ser så här ut:
Object Texture rocks4 Position 78 540 Rotation 0 Skala 1 1 Färg 255 255 255 255 ScrollSpeed 1 1 CustomProperties Slutändighetsobjekt Textur gräs1 Position 60 450 Rotation 0 Skala 1 1 Färg 255 255 255 255 ScrollSpeed 1 1 CustomProperties End End Object Texture grass2 Position 61 459 Rotation 0 Skala 1 1 Färg 255 255 255 255 ScrollSpeed 1 1 CustomProperties End End
Usch. Föreställ dig att du försöker skapa hela nivåer som denna. Processen skulle vara oerhört långsam och tidskrävande - för att inte tala om frustrerande. Problemet är att det är mycket svårt att redigera något som är tänkt att vara sett. Vad kan då göras om detta? Svaret ligger överraskande i samband med själva problemet.
Nivån är en form av visuell kommunikation. Spelare tittar inte på textfiler, de tittar på bilder, sprites, animationer och så vidare. Tänk på en målare: Picasso gjorde inte sina målningar genom att infoga RGB-värden per pixel i en dator. Han gjorde sina målningar, bra och målade dem. För att tillämpa samma logik på nivådesign bör vi skapa ett verktyg som gör det möjligt för oss att visuellt redigera sådana nivåer - en nivåredigerare.
En av de viktigaste fördelarna med att ha en nivåredigerare är bekvämligheten med WYSIWYG ("Vad du ser är vad du får" - det du ser i redaktören är vad du får i spelet). Som beskrivits ovan är det mycket enklare att designa när du kan se vad du redigerar.
En annan fördel är att det möjliggör snabbare och effektivare design iteration. Processen med nivådesign kan brytas ner till ett enkelt flödesschema så här:
Det är avgörande att du kan röra sig smidigt mellan design och testfaser, eftersom det möjliggör snabbare iterationer och mindre tid totalt.
Den sista anledningen till att ha en nivåredaktör är att det gör jobben med plandesign mycket mindre teknisk. Detta är särskilt relevant när du arbetar i ett team: Tänk dig att skicka ovanstående textfil till artisterna och berätta för dem att utforma nivåer i det formatet!
God kommunikation - både verbal och visuell - är väsentlig inom ett team, och en planredaktör kan göra de icke-tekniska designers liv mycket enklare och ta bort en potentiell kommunikationsbarriär mellan dem och utvecklarna.
Så i korthet är de tre viktigaste orsakerna till att ha en nivåredaktör att de tillåter dig att:
Du kanske frågar varför du vill skapa din egen redaktör när det redan finns så många fritt tillgängliga att använda - och jag kommer inte att ljuga, det finns några bra redaktörer där ute.
Här är några jag vet om för 2D-spel:
Det finns fördelar och nackdelar med att använda en generisk, befintlig redaktör. Det är troligt att det är robust och väl underhållet, men det vet ingenting om ditt spel, så du kan behöva göra kloka tricks för att det ska kunna fungera korrekt med ditt spel. Detta gräver in i iterationstiden och kan resultera i mycket mer onödig tid som spenderas vid skapandet av innehåll.
Du måste också lära dig hur du använder den, men om du använde din egen redaktör vet du självklart allt om det redan.
Här är min personliga lista över fördelar och nackdelar för varje typ av redaktör:
Färdiga:
Själv skapat:
Det är upp till dig, men för denna artikels skull kommer jag att fokusera på att designa din egen.
Därefter delar jag mina bästa tips för att skapa en robust och effektiv nivåredigerare.
Det kan hända att du måste skriva mer kod för en nivåredaktör. Men varför inte göra denna process så smärtfri som möjligt?
Om du är på den punkten där du behöver en nivåredigerare har du förmodligen lite struktur till din spelarkitektur (klasser, gränssnitt, arv etc.). Återanvänd denna kod! Om du redan har en massa klasser för att skriva och uppdatera saker till spelet, behöver du inte skriva om det för redaktören. Med andra ord, skriv INTE en separat motor för redaktören. Förutom att du låter dig återanvända spelkoden, hjälper det dig att minska klyftan mellan hur nivån ser ut i din redaktör och hur den ser ut i spelet.
Det finns två sätt att implementera en nivåredigerare: du kan få den i spel eller bygga den som en extern app. Återigen har båda tillvägagångssätten sina upp-och nedgångar.
Redaktören i spelet skulle i huvudsak eliminera klyftan mellan design och testning, men det skulle kräva mycket mer GUI-arbete, till exempel. Den externa redaktören kan använda GUI-bibliotek och ha robusta funktioner, men designtest iterationen skulle vara lite längre, med tanke på att du måste ständigt växla mellan två olika appar.
Jag föredrar personligen det första tillvägagångssättet eftersom jag tycker att det känns mest naturligt, och jag tycker verkligen om bekvämligheten att byta mellan att designa och testa omedelbart.
Kom ihåg att denna redaktör är för dig (eller din nivådesigner, om du arbetar i ett lag). Det finns inget behov av att få det att se bra ut. Det är faktiskt en slöseri med tid, om du inte planerar att distribuera redaktören. I stället fokusera på att göra en funktionell nivåredigerare så fort som möjligt så att du kan komma till innehållsskapande. (Senare när ditt spel närmar sig slutförandet kan du överväga saker som "försköna" redaktören.)
Det kan tyckas självklart, men genvägar är dina vänner. Ha en nyckel knuten till varje åtgärd du tror du kan göra. Jag är seriös; gör så här kommer du att spara så mycket tid när du utformar. Om du trycker på 'C' i mittredigeringsprogrammet för mitt spel skapas till exempel en kopia av det aktuella valda objektet. Det är enkelt, men oerhört användbart och sparar mycket tid.
Till exempel, låt mig visa dig redaktören för mitt nuvarande utvecklingsspel, Mori. Här är en kakel som jag har roterat och skalat:
Allt jag behöver göra är att trycka på 'C' och ... voila!
Det här är den vackra delen av att designa din egen redaktör: det kan göra allt du vill att den ska göra.
Varje spel är annorlunda; vissa spel kräver omfattande skript, medan andra kan involvera invecklade AI-beteenden. Alla dessa kan integreras i redaktören. Föreställ dig att kunna lägga till en fiende med ett visst beteende bara genom att trycka på några tangenter i redigeraren. Tänk nu att du försöker göra samma sak genom att lägga till kod till en skriptfil. Vilket verkar mer effektivt?
Det finns vissa konventioner som vi har blivit vana vid vid användning av applikationer. Dessa inkluderar bekvämligheter som ångra / återställa, kopiera / klistra in, varningsmeddelanden och så vidare. Om du planerar korrekt kan du implementera alla dessa i din redaktör utan mycket extra arbete. Lita på mig, du kommer att tacka dig själv i framtiden om du har dessa.
En annan funktion som kan göra ditt liv enklare är att kunna testa nivåer utan att spara filen till disken. Detta gör designprovningen så mycket lättare. Mitt spel använder ett spel state management system, så jag har två separata "skärmar" för spel och redigering.
Från spelet, träffar jag en nyckel för att komma in i redigeraren. Redigeraren passerar nivån objektet, som sedan kan manipuleras från redaktören. Därifrån har jag två alternativ: Jag kan spara nivån på disken, eller jag kan slå en viss nyckel och skicka nivåobjektet tillbaka till gameplay-skärmen. Detta gör att jag kan testa nivån direkt utan rädsla för att skriva över mina gamla förändringar.
Kort sagt, en nivåredaktör är en värdefull investering i spelutvecklingsprocessen. Det möjliggör den visuella utformningen av nivåer, snabbare iterationstider och ett lägre teknisk kompetensbehov för designers.
Jag hoppas att du hittade denna artikel intressant och användbar. Tack för att du slog av!