Spillprogrammeringsguide - Tips, Verktøy og Karrierer

av Connor Taylor

En spillprogrammerer er personen som tar en designers visjon og får den til å faktisk fungere i spillmotoren vi bruker. Jeg jobber i mobilspillprogrammeringsteamet hos Kwalee, så for oss er det primært Unity. For eksempel, hvis designeren vil at en terning skal rulle på en bestemt måte, skriver jeg skriptet for å håndtere logikken. Vi samarbeider også med spillkunstnere for å sikre at spillene våre både ser fantastiske ut og oppnår høy ytelse på enheten.

I denne bloggen vil jeg trekke på mine fem år hos Kwalee for å dele essensielle innsikter og råd om å være spillprogrammerer. Jeg vil guide deg gjennom noen av språkene, verktøyene og prinsippene vi bruker, mine karriereråd, samt nybegynner- og avanserte tips.

Hva Gjør En Spillprogrammerer?

Vi skriver koden og hjelper spillet med å bli en realitet. Mens spildesignere lager konseptene og spillkunstnere lager ressursene, vil en programmerer skape den funksjonelle, spillbare opplevelsen. Vi skaper og optimaliserer spillens ytelse og feilsøker problemer som oppdages.

Vi sørger for at et spill føles bra og kjører med høy ytelse. For å gjøre dette, må vi sikre at koden i seg selv er ren og utvidbar, noe som er vanskeligere enn du tror. Vi bruker kodestandarder for å opprettholde konsekvent kvalitet over alle team - et dokument som kan inneholde navngivingsstandarder, formatering osv. Men noen ganger er ikke ting alltid så enkle, og fra tid til annen må du kanskje tenke utenfor boksen for å få ting gjort i tide.

Våre ansvar inkluderer også å sørge for at spillet kjører godt på sluttbrukerens maskinvare. For eksempel, i våre mobilspill må vi unngå at eldre enheter blir for varme, så vi jobber sammen med kunstnere for å optimalisere antall tegnekall. Et tegnekall er en kommando sendt fra Central Processing Unit (CPU) til Graphics Processing Unit (GPU) for å tegne et objekt på skjermen - det forteller GPU-en å tegne grafiske elementer som teksturer, masker eller sjablonger. Vi må minimere antallet av disse tegnekallene i spillet vårt fordi for mange kan forårsake problemer som fallet i bildefrekvens eller stamming. Det er mange måter å løse dette på, men ting som å batchprosesserer flere objekter til et enkelt tegnekall eller redusere antall unike teksturer og materialer kan alle hjelpe. Dette er spesielt viktig for mobil, da det er så mange forskjellige enheter på markedet, alle med varierende tekniske spesifikasjoner.

Hva Er De Viktigste Spillprogrammeringsspråkene?

Mesteparten av vår tid som dag-til-dag spillprogrammerere tilbringes på å skripte i et utvalg av programmeringsspråk - vi er tross alt programvareutviklere av en annen type. Det er mange språk å velge blant. Noen virker enklere enn andre, men når du har lært og mestret ett, kan du definitivt lære andre - den største utfordringen er å få foten innenfor døren.

Her er en introduksjon til noen av de mest populære spillprogrammeringsspråkene:

  • C# - et allsidig og populært programmeringsspråk som brukes mye i spillutvikling. Det er en av de enkleste å plukke opp hvis du er nybegynner. En av dens beste funksjoner er automatisk minnebehandling - så den håndterer minnetildeling for deg - veldig nyttig for travle programmerere som oss.
  • C++ - i kontrast, er dette et umanaged språk, så du må manuelt allokere og frigjøre minne, noe som gjør det til et større steg opp i kompleksitet og vanskelighetsgrad. Imidlertid gir det større fart, kontroll og ytelse.
  • Java - lik C#, Java har sin egen minnehåndtering og automatiske minnebehandling, noe som gjør det lettere for utviklere å håndtere minne uten å bli for detaljert. Det brukes mye innen webutvikling og bedriftsapplikasjoner, og selv om det kanskje (måtte hevdes) ikke være toppvalget for spillutvikling, forblir det et solid alternativ for å skape skalerbare og effektive applikasjoner.
  • Swift - dette er Apples eget språk for å bygge apper og spill for iOS og macOS. Dette betyr imidlertid at det er mindre nyttig for utvikling på tvers av plattformer - ettersom vi alltid sikter på å publisere mobilspillene våre både på Android og iOS.

Hvordan Blir Man En Spillprogrammerer?

Det finnes en rekke forskjellige måter du kan bli en spillprogrammerer på. Min vei er ganske konvensjonell - jeg studerte Spil Design og Programmering ved Universitetet i Staffordshire. Opprinnelig trodde jeg at jeg skulle gå inn i spillkunst - jeg var alltid veldig lidenskapelig opptatt av kunst som barn, pluss jeg likte veldig godt kunstmodulene på universitetet, men mens jeg var der oppdaget jeg at jeg virkelig likte å skape gameplay. Det kunne ta meg flere dager å lage en enkelt høy-poly modell, men jeg kunne få en and til å fly og eksplodere på halve tiden. Prototyping lar meg se resultatet raskt rett foran meg.

Imidlertid er det vakre med å programmere spill at det er tilgjengelig for de fleste folk selv om du ikke kommer gjennom en tradisjonell rute. Jeg hadde venner på universitetet som var 50+ år gamle - det er aldri for sent å oppleve noe nytt. Hos Kwalee har vi til og med ansatt noen som lærte hovedsakelig gjennom YouTube-videoer og laget et spill for moro skyld. Det er så mange muligheter for frisk og ivrig talent i dag. Når vi ser på porteføljer av nyere studenter, har de så mye mer under beltet. Vi ser fantastisk talent komme igjennom, og det er en spennende tid i industrien.

Et spørsmål du kanskje er ivrig etter å stille - vil AI påvirke programmering som en karriere? Det kan være ekstremt nyttig, og det blir bedre. Perfekt hvis du trenger noe forklart eller du sitter fast i et problem. Du kan bruke det til å feilsøke feil, eller refaktorere ("rydde opp") koden din ved å lime den inn i den nyeste ChatGPT. Men når vi ser på porteføljer vil vi se arbeidet du har gjort og er stolt av, AI er greit å bruke, men prøv å ikke bruke det som en erstatning for dine egne ferdigheter.

Hva Er En Typisk Dag I Livet Til En Spillprogrammerer?

La meg gi et eksempel basert på mitt liv. Jeg er en lederprogrammerer (jeg kaller det drømmejobben min) så det er en fantastisk blanding av å være hands-on og lede andre programmerere!

En typisk dag i verdenen min er å komme inn, få en latte, så dobbeltsjekke eventuelle feil eller blokkeringer for QA-teamet. Sjekke med teamet for å se om noen trenger at jeg gjør noe for å fjerne blokkeringen av arbeidet deres. Så settes musikken på og oppgavelisten opp. Vi deler fremdriftsvideoer via Slack for å få raske tilbakemeldinger, mens vi også hopper mellom 2-3 prosjekter for å støtte medlemmer av teamet mitt. Vi bruker også mye tid på å investere i delte systemer for å gjøre programmeringen vår mer effektiv - alt må vedlikeholdes, oppdateres og fikses regelmessig for å holde ting jevne.

Nybegynner Tips For Spillprogrammering

Hvis du begynner og ønsker å bli en fullverdig programmerer, er her mine nybegynner tips!

  • Det er så mye å lære på nettet, på YouTube og det er så mange eksempelspill at du ikke har noen unnskyldning for ikke å lære! De populære motorene er gratis og veldig morsomme å bruke!
  • På motsatt ende av spekteret, selv om det er 30 år gammelt, bør du prøve å lese den innflytelsesrike boken "Design Patterns: Elements of Reusable Object-Oriented Software" av den såkalte Gang of Four forfatterne, som introduserte noen av grunnlaget for spill mønstrene vi bruker hver dag i programmering.
  • Du kan ha dine egne ideer, men sørg for at du begynner enkelt slik at du er forankret med det grunnleggende.
  • Når du ikke er bundet til et kommersielt prosjekt, kan du skrive så mye kode du vil, så ha mye moro med å lage fantastiske ting.
  • Bygg en portefølje er virkelig nøkkelen (og det er slik jeg fikk jobben min). Men vær veldig forsiktig med å ikke bare laste opp den samme gamle vanlige universitetarbeidet, for vi vil se mange søknader med disse. Selv å bruke en ekstra dag på å reskinne og legge til flere funksjoner vil hjelpe deg til å skille deg ut.
  • Å lage ditt eget spill i den virkelige verden er også en smart idé - det er veldig billig å få et spill på Google Play, så få noe utgitt som du kan vise rekruttere/utgivere/familie/kjæledyr på telefonen din. Du kan til og med tjene noen tusen dollar i året til du er satt opp med en eksklusiv fulltidsstilling, det er en bonus! Eller det kan friste deg til å lage ditt eget fullverdige spill og samarbeide med en utgiver.
  • Ikke bare lær om programmering - lær om kunst, design, QA og andre disipliner du vil samhandle med. For eksempel er det verdt å forstå QA metoder fordi du kan falle i fellen med å anta at noe fungerer, men du må spille det som en bruker, ikke som noen som skrev koden og har et definert syn på hvordan du forventer at den "bør spilles". Vær destruktiv, prøv de tilfeldige tingene folk kan gjøre, trykke på tilfeldige knapper og annen bisarr oppførsel.

Avanserte Programmeringstips

Her er noen av tipsene som har hjulpet meg å gå fra junior, til programmerer, til senior til leder.

  • Du kan alltid dra nytte av mer læring, og husk at uten feil kan vi ikke lære!
  • Hvis du virkelig er lidenskapelig opptatt av noe - kan du bli mer spesialisert. For eksempel, hvis du elsker å leke med sjablonger og renderrørledninger, lær mer om hvordan du bruker grafiske sjablonger for å utvide evnen din til å rendere komplekse visuelle effekter og bruke renderrørledninger for å optimalisere ytelsen eller gjøre noen fantastiske effekter.
  • Du kan lage noe virkelig kult, som et komplekst system, laste det opp til en ressursbutikk for å vise det hvis kontrakten din tillater det og vise frem ditt avanserte arbeid. Du kan utvikle en nisje som en bestemt type programmerer, som en spillprogrammerer, serverprogrammerer, grafikkprogrammerer eller multiplayer-programmerer.
  • Alternativt kan du gå ned leder ruten som meg, og veilede folk. Min strategi for å utvikle karrieren min har vært å absorbere nye ansvar. Først begynte jeg å forbedre mindre ting, f.eks. små arbeidsflytendringer. Så gjorde jeg prosesser enklere ved å bruke maler for å spare tid ved å lage nye prosjekter. Da fikk jeg en smak for veiledning og ledelse, som hjalp meg med å få mer selvtillit og nå delta i fagfelle vurderinger, kodevurderinger, holde workshops og lede team på prosjekter.

Enten du jobber som en del av et team eller som leder, er det like viktig å gi ros som det er å gi konstruktiv kritikk. Når du vurderer kode, er det bra å hype folk opp!

Hva Er De Viktigste Prinsippene For Spillprogrammering?

Det er noen nøkkel emner som rett og slett må inn i en blogg som dekker spillprogrammering. Dette er noen av de viktigste tingene vi vurderer.

Versionskontroll/kildekontroll

Akkurat som du har lagringspunkter i spill, er det lagringspunkter i prosjektutvikling. De fungerer som generell lagring for prosjektet og betyr at tre eller fire programmerere kan jobbe på et system samtidig, gjøre en endring og skyve den til serveren. Det tillater oss å spore de endringene og enkelt gå tilbake hvis noe skulle bryte. Hvis to utviklere jobber med samme fil, vil den filen bli en del av en sammenslåing, hvis det er konflikter kan vi deretter løse dem manuelt eller velge en enkeltpersons endringer å bruke. Dette vil skje mye når vi bruker Prefabs eller Scener i Unity.

Disse begrepene overlapper noen ganger, men generelt fokuserer kildekontroll på koden, og versjonskontroll inkluderer alle prosjektfiler, ressurser og dokumentasjon.

Når du først begynner å bruke versjonskontroll, kan det føles litt skummelt å begynne med, det kan virke veldig overveldende og når det kommer til konflikter kan du finne deg selv usikker på hva du skal gjøre. Men naturen til versjonskontroll hjelper deg å lagre øyeblikk i tiden, så hvis du ofte oppdaterer og bruker detaljerte bekreftelsesmeldinger, er det utrolig nyttig og trygt. Du kan gå tilbake til flere punkter, ha flere grener osv. Tenk på det som utviklerens sikkerhetsnett, så vi kan unngå en versjon av Pixars Toy Story 2 - ved et uhell slettet og deretter gjenopprettet fra en harddisk hjemme til sin tekniske direktør, i stedet for å være trygg på serveren.

Objektorientert programmering

Dette er typen programmering vi hovedsakelig bruker hos Kwalee. Det bruker objekter for å representere virkelige ting eller abstrakte konsepter, og har som mål å organisere kodebasen ved hjelp av prinsipper som speiler hvordan vi ser og interagerer med objekter i den virkelige verden. Det hjelper med å opprettholde komplekse systemer ved å organisere koden i distinkte klasser som du kan gjenbruke, skalere og vedlikeholde lettere.

Selvfølgelig er det diskusjon om hvorvidt det er bra eller ikke. Selv om det ikke er den høyest ytende, fungerer det bra. Akkurat som med språk, har hver sine egne fordeler og ulemper, og du bør lære ett å starte med og få tak i hvordan språk og kompilatorer (oversettere av menneskekode til maskinkode) fungerer. Du kan også vurdere andre typer, som funksjonell programmering som behandler det mer som matematikk, logisk programmering som bruker fakta og regler eller prosedyreprogrammering som bruker trinn-for-trinn data.

Programmeringsmønstre

Disse er herlig nyttige ting - gjenbrukbare løsninger som kan hjelpe med vanlige problemer du vil møte i programvaredesign. De gir deg en mal for å fikse et problem, så du ikke trenger å gjenoppfinne hjulet hver gang, og du kan følge beprøvde løsninger.

For eksempel, Singleton-designmønsteret hjelper deg med å sikre at det kun er en instans av en klasse som en spillinstilling-administrator gjennom hele spillet ditt, og gir et globalt tilgangspunkt til det. Koden for dette mønsteret betyr at bare én instans av SettingsManager-klassen eksisterer, slik at du ikke trenger å gjenskape eller duplisere den hver gang du trenger den.

Det er også Factory-mønsteret som kan hjelpe deg med å skape objekter på en mer organisert og fleksibel måte. Du kan definere metoder for å generere bestemte typer objekter,
som karakterer eller elementer, basert på inngangsparametere, noe som lar deg enkelt lage flere objekter av liknende type uten å starte fra bunnen av hver gang.

Jeg håper denne bloggen har gitt deg en smak for spillprogrammering, enten du er ny i feltet eller en erfaren programmerer! Hvis du er en hardtarbeidende men morsom person, ville du passet inn i teamet vårt, så finn ut mer om Kwalee-karrierer. Ellers kan du lære om våre mobilspill eller publisering og bli kjent med mer om hva vi slipper løs som utvikler og utgiver.

Om forfatteren:

Connor Taylor, Lead Game Programmer hos Kwalee, trives med å lage spill og fremme et støttende, gøy team. Med 5+ års erfaring, har han skapt hits som Jetpack Jump og veileder andre i Unity-utvikling.

Del denne artikkelen: