En spilprogrammør er personen, der tager en designers vision og får den til at fungere i den spilengine vi bruger. Jeg arbejder i mobilspilprogrammeringsholdet hos Kwalee, så for os er det primært Unity. Hvis designeren fx ønsker, at en terning skal rulle på en bestemt måde, skriver jeg scriptet for logikken. Vi samarbejder også med spilkunstnere for at sikre, at vores spil både ser fantastiske ud og opnår god ydelse på enheden.
I denne blog vil jeg trække på mine fem år hos Kwalee for at dele indsigter og råd om at være spilprogrammør. Jeg vil gennemgå nogle af de sprog, værktøjer og principper, vi bruger, mine karriereråd samt begyndertips og avancerede tips.
Hvad Gør En Spilprogrammør?
Vi skriver koden og hjælper spillet med at blive til virkelighed. Mens spildesignere skaber koncepter og spilkunstnere skaber assets, skaber en programmør den funktionelle, spilbare oplevelse. Vi optimerer spillets ydeevne og løser eventuelle problemer.
Vi sikrer, at et spil føles godt og kører med høj ydeevne. For at opnå dette skal vi sørge for, at koden er ren og udvidelig; en vanskeligere opgave end man tror. Vi bruger kodestandarter for at opretholde konsekvent kvalitet på tværs af vores teams - et dokument der kan indeholde navngivningsstandarder, formatering osv. Men nogle gange er tingene ikke altid så ligetil, og du kan fra tid til anden blive nødt til at tænke ud af boksen.
Vores ansvar inkluderer også at sikre, at spillet kører godt på slutbrugerens hardware. I vores mobilspil skal vi fx 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 fra CPU'en til GPU'en om at gengive et objekt på skærmen - det fortæller GPU'en at tegne grafiske elementer som teksturer, masker eller shaders. Vi skal minimere disse draw calls i spillet for at undgå problemer som frame drop eller hakken. Der er mange måder at løse dette på, men ting som at samle flere objekter i en enkelt draw call eller reducere antallet af unikke teksturer og materialer kan hjælpe. Dette er især vigtigt for mobilenheder, da der er så mange forskellige enheder på markedet, alle med varierende tekniske specifikationer.
Hvilke Er De Vigtigste Spilprogrammeringssprog?
Det meste af vores daglige tid som spilprogrammører bruges på at script i et udvalg af programmeringssprog - vi er trods alt en anden type softwareudviklere. Der er mange sprog at vælge imellem, nogle virker lettere end andre, men når du først har lært et, kan du helt sikkert lære flere - den største udfordring er at få foden indenfor.
Her er en introduktion til nogle af de mest populære spilprogrammeringssprog:
- C# - Et alsidigt og populært programmeringssprog meget anvendt i spiludvikling. Det er et af de nemmeste at lære som begynder. En af dets bedste funktioner er automatisk garbage collection - det styrer memory allocation for dig - meget nyttigt for travle programmører som os.
- C++ - I modsætning er dette et uadministreret sprog, så du skal manuelt allokere og frigøre hukommelse, hvilket gør det mere komplekst og vanskeligt. Men det tillader større hastighed, kontrol og ydeevne.
- Java - Som C#, har Java sine egne hukommelsesstyring og garbage collection, hvilket gør det lettere for udviklere at håndtere hukommelsen uden at gå for meget i detaljer. Det bruges meget i webudvikling og enterprise applikationer, og mens det måske ikke er det topvalg til spiludvikling, er det stadig et godt valg til 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 for cross-platform udvikling - da vi sigter mod altid at offentliggøre vores mobilspil på både Android og iOS.
Hvordan Bliver Man Spilprogrammør?
Der er mange forskellige måder at blive spilprogrammør på. Min vej er ret konventionel - jeg studerede Games Design og Programming ved University of Staffordshire. Oprindeligt troede jeg, at jeg skulle ind i spilkunst - jeg har altid været meget passioneret omkring kunst som barn, og jeg nød virkelig kunstmodulerne på universitetet, men opdagede, 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å den halve tid. Prototypning lader mig se resultatet hurtigt foran mig.
Men det smukke ved at programmere spil er, at det er tilgængeligt for de fleste, selvom du ikke kommer gennem en traditionel rute. Jeg havde venner på uni der var 50+ år - det er aldrig for sent at opleve noget nyt. Hos Kwalee har vi endda ansat en, der lærte primært gennem YouTube-videoer og lavede et spil for hyggens skyld. Der er så mange muligheder for ny og ivrig talent i dag. Når vi ser på porteføljer fra nye studerende, har de så meget mere på programmet. Vi ser fantastisk talent komme igennem, og det er en spændende tid i branchen.
Et spørgsmål, som du sikkert gerne vil stille - vil AI påvirke programmering som karriere? Det kan være meget nyttigt og bliver bedre. Perfekt hvis du har brug for noget forklaret eller sidder fast med et problem. Du kan bruge det til at løse bugs eller refaktorere ('rengøre') din kode ved at indsætte den i den nyeste ChatGPT. Men når vi ser på porteføljer, vil vi se det arbejde, du har gjort og er stolt af, AI er fint at bruge, men prøv ikke at bruge det som en erstatning for dine egne færdigheder.
Hvordan Er En Typisk Dag I En Spilprogrammørs Liv?
Lad mig give et eksempel baseret på mit liv. Jeg er Lead Programmer (jeg kalder det mit drømmejob), så det er en god blanding af hands-on og at lede andre programmører!
En typisk dag i min verden er at komme ind, få en latte og så dobbelt tjekke om der er fejl eller blokader for QA-teamet. Tjekke med teamet om nogen har brug for at få fjernet blokkeringer i deres arbejde. Så kommer musikken på og opgavelisten kommer op. Vi deler fremdriftsvideoer via Slack for at få hurtig feedback, imens vi også hopper mellem 2-3 projekter for at støtte mit teams medlemmer. Vi bruger også meget tid på at investere i fælles systemer for at gøre vores programmering mere effektivt - alt skal vedligeholdes, opdateres og rettes jævnligt for at holde tingene kørende.
Begynder-tips Til Spilprogrammering
Hvis du starter fra bunden og ønsker at blive en fuldt uddannet programmør, her er mine begynder tips!
- Der er så meget at lære online, på YouTube og der er så mange eksemplespil, at du ikke har nogen undskyldning for ikke at lære! De populære engine er gratis og meget sjove at bruge!
- I den helt modsatte ende af spektret, det kan være 30 år gammelt, 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, som introducerede nogle af grundprincipperne for de spil mønstre vi bruger dagligt i programmering.
- Du har måske dine egne ideer, men sørg for at starte simpelt, så du står på et solidt fundament.
- 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 skøre ting.
- At bygge en portefølje er virkelig vigtigt (og det er sådan jeg fik jobbet). Men vær meget forsigtig med ikke bare at uploade det samme gamle standarduniversitetsarbejde, da vi får 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 ide - det er meget billigt at få et spil på Google Play, så få noget udgivet, som du kan vise til rekrutterere/forlag/familie/kæledyr på din telefon. Du kan endda tjene et par tusind dollars om året, indtil du er klar med et eksklusivt fuldtidsjob, det er en bonus! Eller det kan friste dig til at lave dit eget fulde 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 af at antage, at noget fungerer, men du skal spille det som en bruger, ikke som en der har skrevet koden og har en defineret opfattelse af, hvordan du forventer, det 'bør blive spillet'. Vær destruktiv, prøv de tilfældige ting folk måske gør, slå på tilfældige knapper og andre bizarre adfærd.
Avancerede Programmør-tips
Her er nogle af de tips, der har hjulpet mig fra junior, til programmør, til senior til leder.
- Du kan altid drage fordel af mere læring, og husk, at uden fejl kan vi ikke lære!
- Hvis du virkelig brænder for noget - kan du blive mere specialiseret. For eksempel, hvis du elsker at lege med shaders og render pipelines, lær mere om hvordan man bruger grafik shaders til at udvide din evne til at fremstille komplekse visuelle effekter og bruge render pipelines til at optimere ydeevnen eller til at skabe nogle fantastiske effekter.
- Du kan lave noget virkelig cool, som et komplekst system, uploade det til en asset store hvis kontrakten tillader og vise dit avancerede arbejde frem. Du kan udvikle en niche som en bestemt type programmør, såsom en gameplay programmør, serverprogrammør, grafik programmør eller multiplayer programmør.
- Alternativt kan du gå management-vejen ligesom mig og mentorere folk. Min taktik for at udvikle min karriere har været at absorbere nye ansvar. Først begyndte jeg at forbedre mindre ting, i.e. små workflow ændringer. Derefter gjorde jeg processer lettere ved at bruge skabeloner til at spare tid ved oprettelsen af nye projekter. Så fik jeg smag for mentoring og management, hvilket hjalp mig med at opnå mere selvtillid og nu deltage i peer reviews, kodeanmeldelser, værtsværksteder og lede teams på projekter.
Uanset om du arbejder som en del af et team eller som en leder, er det lige så vigtigt at give ros som det er at give konstruktiv kritik. Når man gennemgår kode, er det godt at hype folk op!
Hvad Er De Grundlæggende Principper For Spilprogrammering?
Der er nogle nøgleemner, der simpelthen skal indgå 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 opbevaring for projektet og betyder at tre eller fire programmører kan arbejde på et system samtidigt, lave en ændring og skubbe den til serveren. Det tillader os at spore de ændringer og let spole tilbage, hvis noget skulle gå i stykker. Hvis to udviklere arbejder på den samme fil, vil den fil blive del af en merge, hvis der er konflikter kan vi så manuelt løse dem eller vælge individers ændringer at anvende. Dette sker meget, når man bruger Prefabs eller Scener i Unity.
Disse vilkår overlapper nogle gange, men generelt, fokuserer source control på koden og version control inkluderer alle projektfiler, assets 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 naturen af version control hjælper dig med at gemme øjeblikke i tiden, så hvis du ofte opdaterer og bruger detaljerede commit-beskeder, er det utroligt nyttigt og sikkert. Du kan vende tilbage til flere punkter, have flere grene etc. Tænk på det som udviklernes sikkerhedsnet, så vi kan undgå en version af Pixars Toy Story 2 - ved et uheld slettet og derefter genoprettet fra en harddisk hjemme hos deres Teknisk Chef, i stedet er alt sikkert på serveren.
Objektorienteret programmering
Dette er den type programmering vi primært bruger hos Kwalee. Det bruger objekter til at repræsentere virkelige ting, eller abstrakte koncepter og sigter mod at organisere koden med principper, der afspejler, hvordan vi ser og interagerer med objekter i den virkelige verden. Det hjælper med at vedligeholde komplekse systemer ved at organisere koden i særskilte klasser som du kan genbruge, skalere og vedligeholde lettere.
Selvfølgelig, er der debat om det er godt eller ej. Mens det ikke er den højtydende, fungerer det godt. Ligesom med sprog, har hver deres fordele og ulemper, og du bør lære et for at starte og få et greb om, hvordan sprog og kompilerer (oversættere af menneskelig kode til maskinkode) fungerer. Du kan også overveje andre typer, som funktionel programmering, der behandler det mere som matematik, logikprogrammering der bruger fakta og regler eller procedureprogrammering der bruger trin-for-trin data.
Programmeringsmønstre
Disse er vidunderligt nyttige ting - genanvendelige løsninger, der kan hjælpe med almindelige problemer du vil møde i din softwaredesign. De giver dig en skabelon til at løse et problem, så du ikke behøver at genopfinde hjulet hver gang og kan følge afprøvede løsninger.
For eksempel, Singleton designmønster sikrer, at der kun er én instans af en klasse, som f.eks. en spilindstillingsmanager gennem dit spil, og giver dig et globalt adgangspunkt til den. Koden for dette mønster betyder, at kun én instans af SettingsManager klassen eksisterer, så du ikke behøver genskabe eller duplikere den hver gang du har brug for den.
Der er også Factory Pattern, som kan hjælpe dig med at oprette objekter på en mere organiseret og fleksibel måde. Du kan definere metoder til at generere bestemte typer objekter, ligesom karakterer eller genstande, baseret på inputparametre, som gør det let at oprette flere objekter af samme 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 i feltet eller en erfaren programmør! Hvis du er en hårdtarbejdende men sjov person, ville du passe godt ind i vores team, så find mere ud om Kwalee karriere. Ellers kan du lære om vores mobilspil eller udgivelse og lære mere om, hvad vi udgiver som udvikler og udgiver.








