Spilprogrammeringsvejledning - Tips, Værktøjer og Karriere

af Connor Taylor

En spilprogrammør er personen, der tager en designers vision og får den til faktisk at fungere i den spilengine, vi bruger. Jeg arbejder i mobilspilprogrammeringsteamet hos Kwalee, så for os er det primært Unity. For eksempel, hvis designeren vil have en terning til at rulle på en bestemt måde, skriver jeg scriptet for at håndtere logikken. Vi samarbejder også med spilkreatører for at sikre, at vores spil både ser fantastiske ud og yder godt på enheden.

I denne blog vil jeg trække på mine fem år hos Kwalee for at dele væsentlige indsigter og råd om at være spilprogrammør. Jeg vil guide dig gennem nogle af de sprog, værktøjer og principper vi bruger, min karriererådgivning samt begyndertips og advanceret tips.

Hvad Laver En Spilprogrammør?

Vi skriver koden og hjælper spillet med at blive en realitet. Mens spildesignere skaber koncepterne og kunstnerne skaber aktiverne, vil en programmør skabe den funktionelle, spilbare oplevelse. Vi skaber og optimerer spillets ydeevne og løser eventuelle problemer, der identificeres.

Vi sørger for, at et spil føles godt og kører med høj ydeevne. For at gøre dette skal vi sikre, at koden er ren og udvidelig, hvilket er sværere, end man skulle tro. Vi bruger kodestandarder for at opretholde en ensartet kvalitet på tværs af alle vores teams - et dokument, der kan indeholde navngivningsstandarder, formatering osv. Men nogle gange er tingene ikke altid ligetil, og indimellem skal man tænke ud af boksen for at få tingene gjort til tiden.

Vores ansvar inkluderer også at sikre, at spillet fungerer godt på slutbrugerens hardware. For eksempel skal vi i vores mobilspil undgå, at ældre enheder bliver for varme, så vi arbejder med kunstnere for at optimere antallet af draw calls. En draw call er en kommando sendt fra CPU til GPU for at gengive et objekt på skærmen - den fortæller GPU'en at tegne grafiske elementer som teksturer, meshes eller shaders. Vi skal minimere antallet af disse draw calls i vores spil, fordi for mange kan forårsage problemer som frame rate drops eller hakkende bevægelse. Der er mange måder at løse dette på, men ting som at batche flere objekter i en enkelt draw call eller reducere antallet af unikke teksturer og materialer kan hjælpe. Dette er især vigtigt for mobil, da der er så mange forskellige enheder på markedet, alle med varierende specifikationer.

Hvad Er De Primære Spilprogrammeringssprog?

Størstedelen af vores tid som dag-til-dag spilprogrammører er brugt på at skrive scripts i et udvalg af programmeringssprog - vi er trods alt softwareudviklere af en anden type. Der er mange sprog at vælge imellem. Nogle synes lettere end andre, men når du først har lært og mestret ét, kan du bestemt lære andre - den største udfordring er at få foden indenfor døren.

Her er en introduktion til nogle af de mest populære spilprogrammeringssprog:

  • C# - et alsidigt og populært programmeringssprog, der bruges bredt i spiludvikling. Det er en af de nemmeste at lære, hvis du er nybegynder. En af dens bedste funktioner er automatisk garbage collection - så den administrerer hukommelsesallokering for dig - meget nyttigt for travle programmører som os.
  • C++ - i modsætning hertil er dette et unmanaged sprog, så du skal manuelt allokere og deallokere hukommelse, hvilket gør det et større skridt op i kompleksitet og sværhedsgrad. Men det giver større hastighed, kontrol og ydeevne.
  • Java - ligesom C#, har Java sin egen hukommelsesstyring og garbage collection, hvilket gør det lettere for udviklere at håndtere hukommelse uden at blive for nedtynget af detaljerne. Det bruges bredt i webudvikling og virksomhedsapplikationer, og mens det måske ikke er det bedste valg for spiludvikling, er det stadig en solid mulighed for at skabe skalerbare og effektive applikationer.
  • Swift - dette er Apples native sprog til at bygge apps og spil til iOS og macOS. Dette betyder dog, at det er mindre nyttigt til tværplatformsudvikling - da vi sigter mod altid at udgive vores mobilspil på både Android og iOS.

Hvordan Bliver Du Spilprogrammør?

Der er mange forskellige måder, du kan blive spilprogrammør på. Min vej er ret konventionel - jeg studerede Games Design og Programmering på Staffordshire Universitet. Oprindeligt troede jeg, at jeg ville gå til spilkunst - jeg har altid været meget passioneret omkring kunst som barn, plus jeg nød virkelig kunstmodulerne på universitet, men mens jeg var der, opdagede jeg, at jeg virkelig nød at skabe gameplay. Det kunne tage mig flere dage at skabe en enkelt high poly model, men jeg kunne få en and til at flyve og eksplodere på halvdelen af tiden. Prototyping lader mig se resultatet hurtigt lige foran mig.

Dog er skønheden ved at programmere spil, at det er tilgængeligt for de fleste mennesker, selvom du ikke kommer ad en traditionel vej. Jeg havde venner på uni over 50 år - det er aldrig for sent at opleve noget nyt. Hos Kwalee har vi endda ansat nogen, der primært lærte igennem YouTube-videoer og lavede et spil for sjov. Der er så mange muligheder for nyt og ivrigt talent i dag. Ser vi på porteføljer af nyere studerende, har de så meget mere under bæltet. Vi ser fantastisk talent komme igennem, og det er en spændende tid i branchen.

Et spørgsmål, du sikkert er ivrig efter at stille - vil AI påvirke programmering som en karriere? Det kan være ekstremt nyttigt, og det bliver bedre. Perfekt, hvis du har brug for noget forklaret, eller du sidder fast i et problem. Du kan bruge det til at fejlfinde bugs, eller refaktorere ('rydde op') din kode ved at indsætte den i den nyeste ChatGPT. Men når vi kigger på porteføljer, vil vi se det arbejde, du har gjort, og er stolt af; AI er fint at bruge, men forsøg ikke at bruge det som en erstatning for dine egne færdigheder.

Hvad Er En Typisk Dag Som Spilprogrammør?

Lad mig give et eksempel baseret på mit liv. Jeg er en Lead Programmer (Jeg kalder det mit drømmejob), så det er en fantastisk blanding af hands-on og ledelse af andre programmører!

En typisk dag for mig er at møde ind, få en latte og derefter dobbeltchecke eventuelle bugs eller blokeringer for QA-teamet. Tjekke med teamet for at se, om nogen har brug for, at jeg gør noget for at fjerne blockering i deres arbejde. Så går musikken på, og opgavelisten op. Vi deler progressvideoer via Slack for at få hurtig feedback, mens vi hopper mellem 2-3 projekter for at støtte medlemmer af mit team. Vi bruger også meget tid på at investere i fælles systemer for at gøre vores programmering mere effektiv - det hele skal vedligeholdes, opdateres og repareres regelmæssigt for at holde tingene kørende glat.

Begynder Tips Til Spilprogrammering

Hvis du starter ud og stræber efter at blive en fuldvoksen programmør, her er mine begynder tips!

  • Der er så meget at lære online, på YouTube, og der er så mange eksempler på spil, at du ikke har en undskyldning for ikke at lære! De populære engines er gratis og er meget sjove at bruge!
  • I den helt modsatte ende af spektret, den kan være 30 år gammel, men du bør prøve at læse den indflydelsesrige bog "Design Patterns: Elements of Reusable Object-Oriented Software" af de såkaldte Gang of Four forfattere, der introducerede nogle af grundstenene i spillemønstre vi bruger hver dag i programmering.
  • Du har måske dine egne ideer, men sørg for at starte simpelt, så du er forankret i det grundlæggende.
  • Når du ikke er bundet til et kommercielt projekt, kan du skrive så meget kode, som du vil, så hav masser af sjov med at skabe vanvittige ting.
  • At bygge en portefølje er virkelig nøglen (og det er sådan, jeg fik mit job). Men vær meget forsigtig med ikke bare at uploade det samme gamle standard uni arbejde, for vi vil se mange ansøgninger med disse. Selv at bruge en ekstra dag på at reskinne og tilføje flere funktioner vil hjælpe dig med at skille dig ud.
  • At skabe dit eget virkelige spil er også en smart idé - det er meget billigt at få et spil på Google Play, så få noget udgivet, som du kan vise rekrutterere/udgivere/familie/kæledyr på din telefon. Du kan måske endda tjene nogle tusinde dollars om året, indtil du er klargjort med et eksklusivt fuldtidsjob, det er en bonus! Eller det kan friste dig til at lave dit eget store spil og samarbejde med en udgiver.
  • Lær ikke kun om programmering - lær om kunst, design, QA og andre discipliner, du vil interagere med. For eksempel er det værd at forstå QA-metoder, fordi du kan falde i fælden med at antage, at noget fungerer, men du skal spille det som bruger, ikke som en, der har skrevet koden og har en defineret opfattelse af, hvordan du forventer, at det 'bør spilles'. Være destruktiv, prøv de tilfældige ting, folk kan gøre, trykkende på tilfældige knapper og anden mærkelig opførsel.

Avancerede Programmør Tips

Her er nogle af de tips, der har hjulpet mig fra junior, til programmør, til senior til lead.

  • Du kan altid drage fordel af mere læring, og husk, at uden fejl kan vi ikke lære!
  • Hvis du virkelig er passioneret omkring noget - du kunne blive mere specialiseret. For eksempel, hvis du elsker at lege med shaders og renderpipelines, lær mere om hvordan man bruger grafikshaders til at udvide din evne til at gengive komplekse visuelle effekter og brug renderpipelines til at optimere ydeevnen eller lave nogle fantastiske effekter.
  • Du kunne lave noget rigtig sejt, som et komplekst system, uploade det til en asset store for at fremvise det, hvis din kontrakt tillader det, og vise dit avancerede arbejde frem. Du kunne udvikle en niche som en bestemt type programmør, såsom gameplay programmør, server programmør, grafik programmør eller multiplayer programmør.
  • Alternativt kan du gå ned ad management-vejen som mig, og vejlede folk. Min taktik for at fremme min karriere har været at absorbere nye ansvarsområder. Først begyndte jeg at forbedre mindre ting, dvs. små workflowændringer.. Derefter gjorde jeg processerne lettere ved at bruge templates til at spare tid, når jeg lavede nye projekter. Så fik jeg smag for mentorering og ledelse, hvilket hjalp mig med at få mere selvtillid og nu deltager i peer reviews, code reviews, hosting workshops og leder teams på projekter.

Uanset om du arbejder som en del af et team eller som manager, er det lige så vigtigt at give ros, som det er at give konstruktiv kritik. Når du gennemgår kode, er det godt at hype folk op!

Hvad Er De Vigtigste Principper I Spilprogrammering?

Der er nogle nøgletemaer, der simpelthen skal komme i en blog, der dækker spilprogrammering. Disse er nogle af de vigtigste ting, vi overvejer.

Source Control/Version Control

Ligesom du har gemmepunkter i spil, er der gemmepunkter i projektudvikling. De fungerer som generel lagring for projektet og betyder, at tre eller fire programmører kan arbejde på et system samtidig, skabe en ændring og skubbe det til serveren. Det lader os spore de ændringer og let rulle tilbage, hvis noget skulle bryde. Hvis to udviklere arbejder på den samme fil, vil den fil blive en del af en merge, hvis der er konflikter, kan vi derefter manuelt løse dem eller vælge en persons ændringer til at anvende. Dette vil ske meget, når du bruger Prefabs eller Scener i Unity.

Disse termer overlapper somme tider, men generelt fokuserer source control på koden og version kontrol inkluderer alle projektfiler, aktiver og dokumentation.

Når du først begynder at bruge Source Control, kan det føles lidt skræmmende til at begynde med, det kan virke meget overvældende, og når det kommer til konflikter, kan du finde dig selv usikker på, hvad du skal gøre. Men karakteren af versionskontrol hjælper dig med at gemme øjeblikke i tid, så hvis du ofte opdaterer og bruger detaljerede commit beskeder, er det utroligt nyttigt og sikkert. Du kan gå tilbage til flere punkter, have flere grene osv. Tænk på det som udviklernes sikkerhedsnet, så vi kan undgå en version af Pixars Toy Story 2 - ved et uheld slettet og derefter gendannet fra en harddisk hjemme hos deres tekniske direktør, i stedet er det hele sikkert der på serveren.

Object Oriented Programming

Dette er den type programmering, vi primært bruger hos Kwalee. Det bruger objekter til at repræsentere virkelige ting eller abstrakte koncepter og stræber efter at organisere kodebasen ved hjælp af principper, der spejler, hvordan vi ser og interagerer med objekter i den virkelige verden. Det hjælper med at vedligeholde komplekse systemer ved at organisere koden i distinkte klasser, som du kan genbruge, skalere og vedligeholde lettere.

Selvfølgelig er der debat om, hvorvidt det er godt eller ej. Mens det ikke er den højeste præsterende, fungerer det godt. Ligesom med sprog har hvert sit fordele og ulemper, og du bør lære et for at starte med og få et greb om, hvordan sprog og compilere (oversættere af menneskekode til maskinkode) virker. Du kan også overveje andre typer, såsom funktionel programmering, der behandler det mere som matematik, logikprogrammering, der bruger fakta og regler, eller procedureprogrammering, der bruger trin-for-trin data.

Programming Patterns

Disse er vidunderligt nyttige ting - genanvendelige løsninger, der kan hjælpe med almindelige problemer, du vil stå overfor i din softwaredesign. De giver dig en skabelon til at løse et problem, så du ikke behøver at opfinde hjulet hver gang og kan følge gennemprøvede løsninger.

For eksempel hjælper Singleton designmønsteret dig med at sikre, at der kun er én instans af en klasse, såsom en spillængdeforvalter gennem hele dit spil, og giver dig et globalt adgangspunkt til det. Koden for dette mønster betyder, at kun én instans af SettingsManager-klassen eksisterer, så du behøver ikke at genskabe eller duplikere det hver gang, du har brug for det.

Der er også fabriksmønster, som kan hjælpe dig med at oprette objekter på en mere organiseret og fleksibel måde. Du kan definere metoder til at generere specifikke typer af objekter, som tegn eller genstande, baseret på inputparametre, hvilket tillader dig let at skabe flere objekter af en lignende type uden at starte fra bunden hver gang.

Jeg håber, denne blog har givet dig en smag for spilprogrammering, uanset om du er ny på området eller en erfaren programmør! Hvis du er en hårdtarbejdende, men sjov person, passer du til vores team, så find ud af mere om Kwalee karrierer. Ellers kan du lære om vores mobilspil eller udgivelse og lære mere om, hvad vi udgiver som udvikler og udgiver.

Om forfatteren:

Connor Taylor, Lead Game Programmer hos Kwalee, trives med at lave spil og skabe et støttende, sjovt team. Med 5+ års erfaring har han skabt hits som Jetpack Jump og vejleder andre i Unity-udvikling.

Del denne artikel: