Spelprogrammeringsguide - Tips, Verktyg och Karriärer

En spelprogrammerare är personen som tar en designers vision och får det att faktiskt fungera i spelmotorn vi använder. Jag arbetar i mobilspelprogrammeringsteamet på Kwalee, så för oss är det främst Unity. Till exempel, 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 spelartister för att säkerställa att våra spel både ser fantastiska ut och uppnår hög prestanda på enheten.

I den här bloggen kommer jag att använda mina fem års arbete på Kwalee för att dela viktiga insikter och råd om att vara en spelprogrammerare. Jag kommer att guida dig genom några av de språk, verktyg och principer vi använder, mina karriärråd, samt nybörjar- och avancerade tips.

Vad Gör En Spelprogrammerare?

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

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 i sig är ren och expanderbar, vilket är svårare än man 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 osv. Ibland är dock saker inte alltid så enkla och från tid till annan kan du behöva tänka utanför boxen för att få saker gjorda i tid.

Våra uppgifter inkluderar också att se till att spelet fungerar bra på slutanvändarens hårdvara. Till exempel, i våra mobilspel måste vi undvika att äldre enheter blir för varma, så vi arbetar med konstnärer för att optimera antalet ritningsanrop. Ett ritningsanrop är ett kommando skickat från centralprocessorn (CPU) till grafikprocessorn (GPU) för att rendera ett objekt på skärmen - det instruerar GPU att rita grafiska element som texturer, nät eller shaders. Vi behöver minimera antalet av dessa ritningsanrop i vårt spel eftersom för många kan orsaka problem som bildfrekvensnedgångar eller hackning. Det finns många sätt att lösa detta, men saker som att batcha flera objekt i ett enda ritningsanrop 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 olika tekniska specifikationer.

Vilka äR De Viktigaste Spelprogrammeringsspråken?

Mest av vår tid som dagliga spelprogrammerare tillbringas med att skripta i ett av en rad programmeringsspråk - vi är trots allt programvaruutvecklare av ett annat slag. Det finns många språk att välja mellan. Vissa verkar enklare än andra, men när du väl har lärt dig och behärskat ett kan du definitivt lära dig andra - den största utmaningen är att få in foten genom 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 i stor utsträckning i spelutveckling. Det är ett av de enklaste att börja med om du är nybörjare. En av dess bästa funktioner är automatisk garbage collection - så det hanterar minneshantering åt dig - mycket användbart för upptagna programmerare som oss.
  • C++ - i kontrast är detta ett oövervakat språk, så du måste manuellt allokera och avallokera minne, vilket gör det till ett större steg upp i komplexitet och svårighet. Det möjliggör dock större hastighet, kontroll och prestanda.
  • Java - likt C#, har Java sin egen minneshantering och garbage collection, vilket gör det enklare för utvecklare att hantera minne utan att bli för insnärjda i detaljerna. Det används i stor utsträckning i webb- och företagsapplikationsutveckling, och även om det möjligtvis inte är det bästa valet för spelutveckling, förblir det ett stabilt alternativ för att skapa skalbara och effektiva applikationer.
  • Swift - detta är Apples inbyggda språk för att bygga appar och spel för iOS och macOS. Detta gör det dock mindre användbart för plattformsoberoende utveckling - eftersom vi strävar efter att alltid släppa våra mobilspel på både Android och iOS.

Hur Blir Man Spelprogrammerare?

Det finns en rad olika sätt du kan bli spelprogrammerare på. Min väg är ganska konventionell - jag studerade Speldesign och Programmering vid University of Staffordshire. Ursprungligen trodde jag att jag skulle gå in i spelkonst - jag var alltid mycket passionerad över konst som barn, plus jag verkligen gillade konstmodulerna på universitetet, men när jag var där upptäckte jag att jag verkligen gillade att skapa spelupplevelser. Det kunde ta mig flera dagar att skapa en enda avancerad modell, men jag kunde få en anka att flyga och explodera på halva tiden. Att prototypa gjorde att jag snabbt kunde se resultatet rakt framför mig.

Skönheten med att programmera spel är att det är tillgängligt för de flesta, även om du inte kommer in via traditionella vägar. Jag hade vänner på uni över 50 år - 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ärt sig genom YouTube-videor och gjort ett spel för skojs skull. Det finns så många möjligheter för ny och ivrig talang idag. När du tittar på portföljer av nyare studenter har de så mycket mer på sitt bälte. Vi ser fantastisk talang komma fram 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 en karriär? 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 senaste ChatGPT. Men när vi tittar på portföljer vill vi se det arbete du har gjort och är stolt över, AI är okej att använda, men försök att inte använda det som en 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 en Lead Programmer (jag kallar det mitt drömjobb), så det är en bra blandning av praktiskt arbete och att leda andra programmerare!

En typisk dag i min värld är att komma in, ta en latte, sedan dubbelkolla eventuella buggar eller blockeringar för QA-teamet. Kontrollera med teamet om någon behöver mig för att avblockera deras arbete. Sedan går musiken på och aktivitetslistan upp. Vi delar framstegsvideor via slack för att få snabb feedback, medan vi också hoppar mellan 2-3 projekt för att stödja medlemmarna 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 måste underhållas, uppdateras och fixas regelbundet för att hålla saker igång smidigt.

Nybörjartips För Spelprogrammering

Om du just börjar och har som mål att bli en fullfjädrad programmerare, här är mina nybörjartips!

  • Det finns så mycket att lära sig 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 är mycket roliga att använda!
  • I motsatt ända av spektrumet, även om det är 30 år gammalt, bör du 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 de grunder för spelmönster vi använder varje dag i programmering.
  • Du kan ha egna idéer, men se till att du börjar enkelt så att du är grundad i grunderna.
  • När du inte är bunden till ett kommersiellt projekt kan du skriva så mycket kod du vill, så ha mycket roligt med att skapa galna saker.
  • Att bygga en portfölj är verkligen viktigt (och det är så jag fick mitt jobb). Men var mycket noga med att inte bara ladda upp samma gamla standard universellt arbete, eftersom vi kommer att se många ansökningar med dessa. Även att lägga en extra dag på att omprofilera 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 släppt som du kan visa rekryterare/publicister/familj/husdjur på din telefon. Du kan till och med tjäna ett par tusen dollar per år tills du har ordnat med ett exklusivt heltidsjobb, vilket är en bonus! Eller det kan locka dig till att skapa 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 måste spela det som en användare, inte som någon som har skrivit koden och har en definierad bild av hur du förväntar dig att det "ska spelas". Var destruktiv, testa de slumpmässiga saker som folk kan göra, trycka på slumpmässiga knappar och annat bisarrt beteende.

Avancerade Programmeringstips

Här är några av tipsen 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 är riktigt passionerad över något - kan du bli mer specialiserad. Till exempel, om du älskar att leka med shaders och återgivningspipelines, 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änd renderingspipelines 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 tillgångsbutik för att visa upp 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 spelprogrammerare, serverprogrammerare, grafikprogrammerare eller multiplayer-programmerare.
  • Alternativt kan du gå ledarskapsvägen som jag, och mentorpersoner. Min taktik för att utveckla min karriär har varit att ta till mig nya ansvarsområden. Först började jag förbättra mindre saker, dvs. små förändringar i arbetsflödet. Sedan gjorde jag processer enklare genom att använda mallar för att spara tid när jag skapade nya projekt. Sedan fick jag smak för mentorskap och ledarskap, vilket hjälpte mig att få mer självförtroende och nu delta i kamratgranskningar, kodgranskningar, värda workshops och leda team på projekt.

Oavsett om du arbetar som en del av ett team eller som manager är det lika viktigt att ge beröm som det är att ge konstruktiv kritik. När du granskar kod är det bra att höja teamets uppmärksamhet!

Vilka äR De Viktigaste Principerna För Spelprogrammering?

Det finns vissa viktiga ämnen som helt enkelt måste ingå i en blogg som täcker spelprogrammering. Här är några av de viktigaste sakerna vi beaktar.

Källkontroll/Versionskontroll

Precis som det finns sparpunkter i spel finns det sparpunkter i projektutveckling. De fungerar som en allmän lagring för projektet och innebär att tre eller fyra programmerare kan arbeta på ett system samtidigt, göra en ändring och trycka den till servern. Det gör att vi kan spåra dessa ändringar och enkelt återkomma om något skulle gå sönder. Om två utvecklare arbetar med 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 enskild individs ändringar att tillämpa. Detta kommer att hända mycket när vi använder prefabricerade objekt eller scener i 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 att börja med, det kan verka väldigt överväldigande och när det gäller konflikter kan du hitta dig själv osäker på vad du ska göra. Men naturen av 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å att vi kan undvika en version av Pixars Toy Story 2 - av misstag raderad och sedan återhämtad från en hårddisk hemma hos deras tekniska direktör, istället ligger allt säkert där på servern.

Objektorienterad programmering

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

Naturligtvis finns det debatt om det är bra eller inte. Även om det inte är den högsta presteraren fungerar det bra. Precis som med språk har varje sitt och du bör lära dig ett för att börja med 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, så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 fantastiskt användbara saker - återanvändbara lösningar som kan hjälpa till med vanliga problem du kommer att möta i din programvarudesign. De ger dig en mall för att lösa ett problem, så du behöver inte uppfinna hjulet på nytt varje gång och kan följa beprövade lösningar.

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

Det finns också Fabriksmönstret som kan hjälpa dig att 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å inmatningsparametrar, vilket gör att du enkelt kan skapa fler objekt av en liknande typ utan att börja från grunden 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 in i vårt team, så ta reda på mer om Kwalee karriärer. 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.

Dela denna artikel: