Game Programming Guide - Tips, Tools and Careers

av Connor Taylor

En spelprogrammerare är den person som förverkligar designerens vision i spelmotorn vi använder. Jag jobbar i mobilspelsprogrammeringsteamet på Kwalee, så för oss är det främst Unity. Om designern vill att en tärning ska rulla på ett visst sätt, skriver jag skriptet för att hantera logiken. Vi samarbetar också med spelkonstnärer för att se till att våra spel både ser fantastiska ut och presterar bra på enheter.

I den här bloggen, baserat på mina fem år på Kwalee, delar jag viktiga insikter och råd om att vara spelprogrammerare. Jag går igenom några av de språk, verktyg och principer vi använder, min karriärråd, samt tips för nybörjare och avancerade.

Vad Gör En Spelprogrammerare?

Vi skriver koden och hjälper spelet bli verklighet. Medan spelutvecklare skapar koncept och spelkonstnärer skapar tillgångar, skapar en programmerare den funktionella, spelbara upplevelsen. Vi skapar och optimerar spelets prestanda och löser eventuella problem.

Vi ser till att ett spel känns bra och körs med hög prestanda. För att göra detta måste vi se till att koden själv är ren och expanderbar, vilket är svårare än du tror. Vi använder kodningsstandarder för att upprätthålla konsekvent kvalitet över alla våra team - ett dokument som kan innehålla namngivningsstandarder, formatering etc. Men ibland är saker inte alltid så enkla och ibland behöver du tänka utanför boxen för att få saker gjorda i tid.

Våra ansvar inkluderar även att se till att spelet körs bra på slutanvändarens hårdvara. Till exempel, i våra mobilspel, behöver vi undvika att äldre enheter blir för varma, så vi arbetar med konstnärer för att optimera antalet draw calls. En draw call är ett kommando som skickas från Central Processing Unit (CPU) till Graphics Processing Unit (GPU) för att rendera ett objekt på skärmen - det säger GPU:n att rita grafiska element som texturer, mesh eller shaders. Vi behöver minimera antalet av dessa draw calls i vårt spel eftersom för många kan orsaka problem som frame rate drops eller stuttering. Det finns många sätt att lösa detta, men saker som att batcha flera objekt i en enda draw call eller minska antalet unika texturer och material kan alla hjälpa. Detta är särskilt viktigt för mobil, eftersom det finns så många olika enheter på marknaden, alla med varierande tekniska specifikationer.

Vilka äR De Viktigaste Spelprogrammeringsspråken?

Mest av vår tid som dagliga spelprogrammerare spenderas på att skripta i ett av flera programmeringsspråk - vi är trots allt mjukvaruutvecklare av en annan typ. Det finns många språk att välja mellan. Vissa verkar lättare än andra, men när du väl har lärt dig och bemästrat ett kan du definitivt lära dig andra - den största utmaningen är att få in en fot i dörren.

Här är en introduktion till några av de mest populära spelprogrammeringsspråken:

  • C# - ett mångsidigt och populärt programmeringsspråk som används mycket inom spelutveckling. Det är ett av de lättaste att ta till sig om du är nybörjare. En av dess bästa funktioner är automatisk garbage collection - så det hanterar minnesallokering åt dig - mycket användbart för upptagna programmerare som oss.
  • C++ - i kontrast, detta är ett icke-hanterat språk, så du måste manuellt allokera och frigöra minne, vilket gör det mer komplext och svårt. Men det tillåter större hastighet, kontroll och prestanda.
  • Java - likt C#, har Java egen minneshantering och garbage collection, vilket gör det lättare för utvecklare att hantera minne utan att fastna i detaljerna. Det används mycket inom webbutveckling och företagsapplikationer, och även om det (möjligen) inte är det främsta valet för spelutveckling, förblir det ett solitt alternativ för att skapa skalbara och effektiva applikationer.
  • Swift - detta är Apples inhemska språk för att bygga appar och spel för iOS och macOS. Detta innebär dock att det är mindre användbart för plattformsoberoende utveckling - eftersom vi alltid strävar efter att publicera våra mobilspel på både Android och iOS.

Hur Blir Du En Spelprogrammerare?

Det finns flera olika sätt att bli en spelprogrammerare. Min väg är ganska konventionell - jag studerade Games Design and Programming vid University of Staffordshire. Ursprunligen trodde jag att jag skulle gå in i spelkonst - jag var alltid väldigt passionerad för konst som barn, plus jag gillade verkligen konstmodulerna på universitetet, men när jag var där upptäckte jag att jag verkligen gillade att skapa gameplay. Det kunde ta mig flera dagar att skapa en enda högpolymodell, men jag kunde få en anka att flyga och explodera på halva tiden. Prototyping låter mig se resultatet snabbt rakt framför mig.

Dock är det vackra med att programmera spel att det är tillgängligt för de flesta även om du inte kommer via en traditionell väg. Jag hade vänner på uni som var 50+ - det är aldrig för sent att uppleva något nytt. På Kwalee har vi till och med anställt någon som främst lärde sig genom YouTube-videor och gjorde ett spel för skojs skull. Det finns så många möjligheter för ny och ivrig talang idag. När vi tittar på portföljerna hos nyare studenter, har de så mycket mer under bältet. Vi ser fantastiska talanger komma igenom och det är en spännande tid i branschen.

En fråga du förmodligen är ivrig att ställa - kommer AI att påverka programmering som yrke? Det kan vara extremt användbart, och det blir bättre. Perfekt om du behöver något förklarat eller om du sitter fast i ett problem. Du kan använda det för att felsöka buggar, eller refaktorera ('städa upp') din kod genom att klistra in den i den senaste ChatGPT. Men när vi tittar på portföljer vill vi se det arbete du har gjort och är stolt över, AI är bra att använda, men försök att inte använda det som ersättning för dina egna färdigheter.

Hur Ser En Typisk Dag Ut För En Spelprogrammerare?

Låt mig ge ett exempel baserat på mitt liv. Jag är Lead Programmer (jag kallar det mitt drömjobb) så det är en fantastisk blandning av praktiskt arbete och att leda andra programmerare!

En typisk dag för mig är att komma in, ta en latte, sedan dubbelkolla eventuella buggar eller blockerare för QA-teamet. Kolla med teamet för att se om någon behöver att jag gör något för att avblockera deras arbete. Sedan går musiken på och att-göra-listan går upp. Vi delar framstegsvideor via Slack för att få snabb feedback, samtidigt som vi hoppar mellan 2-3 projekt för att stödja medlemmar i mitt team. Vi spenderar också mycket tid på att investera i delade system för att göra vår programmering mer effektiv - allt behöver underhållas, uppdateras och fixas regelbundet för att hålla saker igång smidigt.

Nybörjartips För Spelprogrammering

Om du börjar och siktar på att bli en fullfjädrad programmerare, här är mina nybörjartips!

  • Det finns så mycket att lära online, på YouTube och det finns så många exempelspel att du inte har någon ursäkt för att inte lära dig! De populära motorerna är gratis och mycket roliga att använda!
  • I den totala motsatta änden av spektrumet, det kanske är 30 år gammalt, men du bör försöka läsa den inflytelserika boken "Design Patterns: Elements of Reusable Object-Oriented Software" av de så kallade Gang of Four-författarna, som introducerade några av grunderna för spelmönster vi använder varje dag i programmering.
  • Du kanske har egna idéer, men se till att du börjar enkelt så att du är grundad med grunderna.
  • När du inte är bunden till ett kommersiellt projekt kan du skriva så mycket kod du vill, så ha mycket roligt att skapa galna saker.
  • Att bygga en portfölj är verkligen nyckeln (och det är så jag fick mitt jobb). Men var mycket försiktig så att du inte bara laddar upp samma gamla standarduniversitetsarbete, för vi kommer att se många ansökningar med dessa. Även att spendera en extra dag på att byta utseende och lägga till fler funktioner hjälper dig att sticka ut.
  • Att skapa ditt eget verkliga spel är också en smart idé - det är mycket billigt att få ett spel på Google Play, så få något utgivet som du kan visa för rekryterare/publicister/familj/husdjur på din telefon. Du kan till och med tjäna några tusen dollar per år tills du har ett exklusivt heltidsjobb, det är en bonus! Eller det kan fresta dig att göra ditt eget fullständiga spel och samarbeta med en utgivare.
  • Lär dig inte bara om programmering - lär dig om konst, design, QA och andra discipliner du kommer att interagera med. Till exempel, det är värt att förstå QA-metoder eftersom du kan falla i fällan att anta att något fungerar, men du behöver spela det som en användare, inte som någon som skrev koden och har en definierad syn på hur du förväntar dig att det 'ska spelas'. Var destruktiv, prova de slumpmässiga saker människor kan göra, tryck på slumpmässiga knappar och annat bisarrt beteende.

Avancerade Programmerartips

Här är några av de tips som har hjälpt mig gå från junior, till programmerare, till senior till ledare.

  • Du kan alltid dra nytta av mer lärande, och kom ihåg att utan misstag kan vi inte lära oss!
  • Om du verkligen är passionerad för något - kan du bli mer specialiserad. Till exempel, om du älskar att leka med shaders och renderpipelines, lär dig mer om hur du använder grafikshaders för att utöka din förmåga att rendera komplexa visuella effekter och använda renderpipelines för att optimera prestanda eller för att göra några fantastiska effekter.
  • Du kan göra något riktigt coolt, som ett komplext system, ladda upp det till en asset store för att visa det om ditt kontrakt tillåter och visa upp ditt avancerade arbete. Du kan utveckla en nisch som en viss typ av programmerare, såsom en gameplay-programmerare, serverprogrammerare, grafikprogrammerare eller multiplayerprogrammerare.
  • Alternativt kan du gå ned ledningens väg som jag, och mentorera människor. Min taktik för att avancera min karriär har varit att ta på mig nya ansvar. Först började jag förbättra mindre saker, dvs. små arbetsflödesförändringar.. Sedan gjorde jag processer enklare genom att använda mallar för att spara tid när jag skapade nya projekt. Sedan fick jag en smak för mentorskap och ledarskap, vilket hjälpte mig få mer självförtroende och nu delta i granskningar av kamrater, kodgranskningar, hålla workshops och leda team på projekt.

Oavsett om du arbetar som en del av ett team eller som chef, är det lika viktigt att ge beröm som det är att ge konstruktiv kritik. När du granskar kod, är det bra att hypea folk!

Vad äR De Viktigaste Principerna För Spelprogrammering?

Det finns några viktiga ämnen som helt enkelt måste gå in i en blogg som täcker spelprogrammering. Dessa är några av de viktigaste sakerna vi överväger.

Källkontroll/Versionskontroll

Precis som du har sparpunkter i spel, finns det sparpunkter i projektutveckling. De fungerar som allmän lagring för projektet och innebär att tre eller fyra programmerare kan arbeta på ett system samtidigt, skapa en förändring och trycka den till servern. Det låter oss spåra dessa förändringar och enkelt återgå om något skulle brytas. Om två utvecklare arbetar på samma fil, blir den filen en del av en sammanslagning, om det finns konflikter kan vi sedan manuellt lösa dem eller välja en individs förändringar att tillämpa. Detta kommer att hända ofta när man använder Prefabs eller Scenes inom Unity.

Dessa termer överlappar ibland, men generellt fokuserar källkontroll på koden och versionskontroll inkluderar alla projektfiler, tillgångar och dokumentation.

När du först börjar använda Källkontroll kan det kännas lite skrämmande till en början, det kan verka väldigt överväldigande och när det kommer till konflikter kan du finna dig osäker på vad du ska göra. Men naturen hos versionskontroll hjälper dig att spara ögonblick i tiden, så om du ofta uppdaterar och använder detaljerade commit-meddelanden, är det otroligt användbart och säkert. Du kan återgå till flera punkter, ha flera grenar etc. Tänk på det som utvecklarens säkerhetsnät, så vi kan undvika en version av Pixars Toy Story 2 - av misstag raderad och sedan återställd från en hårddisk hemma hos deras tekniska direktör, istället finns allt säkert där på servern.

Objektorienterad programmering

Detta är typen av programmering vi främst använder på Kwalee. Den använder objekt för att representera verkliga saker, eller abstrakta koncept, och syftar till att organisera kodbasen med principer som speglar hur vi ser och interagerar med objekt i verkliga världen. Det hjälper till att upprätthålla komplexa system genom att organisera kod i distinkta klasser som du kan återanvända, skala och underhålla lättare.

Självklart finns det debatt om huruvida det är bra eller inte. Även om det inte är den högsta presteraren, fungerar det bra. Precis som med språk, har varje sina egna för- och nackdelar och du bör lära dig ett för att börja och få grepp om hur språk och kompilatorer (översättare av mänsklig kod till maskinkod) fungerar. Du kan också överväga andra typer, som funktionell programmering som behandlar det mer som matematik, logisk programmering som använder fakta och regler eller procedurprogrammering som använder steg-för-steg-data.

Programmeringsmönster

Dessa är underbart användbara saker - återanvändbara lösningar som kan hjälpa med vanliga problem du kommer att möta i din mjukvarudesign. De ger dig en mall för att fixa ett problem, så du behöver inte uppfinna hjulet varje gång och kan följa beprövade lösningar.

Till exempel, Singleton designmönstret hjälper dig säkerställa att det bara finns en instans av en klass som en spelinställningshanterare i hela ditt spel, och ger dig en global åtkomstpunkt till det. Koden för detta mönster innebär att det bara finns en instans av SettingsManager-klassen så du inte behöver återskapa eller duplicera den varje gång du behöver den.

Det finns också Factory Pattern som kan hjälpa dig skapa objekt på ett mer organiserat och flexibelt sätt. Du kan definiera metoder för att generera specifika typer av objekt, som karaktärer eller föremål, baserat på indata parametrar, vilket gör att du enkelt kan skapa fler objekt av liknande typ utan att börja från början varje gång.

Jag hoppas denna blogg har gett dig en smak för spelprogrammering, oavsett om du är ny i fältet eller en erfaren programmerare! Om du är en hårt arbetande men rolig person, skulle du passa vårt team så ta reda på mer om Kwalee careers. Annars kan du lära dig om våra mobilspel eller publicering och lära känna mer om vad vi släpper som utvecklare och utgivare.

Om författaren:

Connor Taylor, Lead Game Programmer på Kwalee, trivs med att skapa spel och främja ett stöttande, roligt team. Med 5+ års erfarenhet har han skapat succéer som Jetpack Jump och mentor andra i Unity-utveckling.

Dela denna artikel: