Een game-programmeur is de persoon die een ontwerper's visie werkelijkheid laat worden in de game engine die we gebruiken. Ik werk in het mobiele game-programmeringsteam bij Kwalee, dus voor ons is het voornamelijk Unity. Als de ontwerper bijvoorbeeld wil dat een dobbelsteen op een bepaalde manier rolt, schrijf ik het script om de logica aan te pakken. We werken ook samen met game-artiesten om ervoor te zorgen dat onze games er geweldig uitzien en geweldige prestaties op het apparaat leveren.
In deze blog deel ik essentiële inzichten en advies over het zijn van een game-programmeur, gebaseerd op mijn vijf jaar werken bij Kwalee. Ik bespreek enkele van de talen, hulpmiddelen en principes die we gebruiken, mijn carrière-advies, en beginner en gevorderde tips.
Wat Doet Een Game-programmeur?
We schrijven de code en helpen de game werkelijkheid te maken. Terwijl game-ontwerpers de concepten creëren en game-artiesten de assets maken, creëert een programmeur de functionele, speelbare ervaring. We creëren en optimaliseren de prestaties van de game en lossen eventuele geïdentificeerde problemen op.
We zorgen ervoor dat een game geweldig aanvoelt en met hoge prestaties draait. Om dit te doen, moeten we ervoor zorgen dat de code zelf schoon en uitbreidbaar is, wat moeilijker is dan je denkt. We gebruiken codestandaarden om consistente kwaliteit in al onze teams te behouden - een document dat naamgevingsstandaarden, opmaak, enz. kan bevatten. Soms zijn dingen echter niet altijd eenvoudig en moet je buiten de gebaande paden denken om dingen op tijd gedaan te krijgen.
Onze verantwoordelijkheden omvatten ook ervoor zorgen dat de game goed draait op de hardware van de eindgebruiker. Bijvoorbeeld, in onze mobiele games moeten we voorkomen dat oudere apparaten te heet worden, dus werken we met artiesten samen om het aantal draw calls te optimaliseren. Een draw call is een opdracht van de Central Processing Unit (CPU) naar de Graphics Processing Unit (GPU) om een object op het scherm weer te geven - het vertelt de GPU om grafische elementen zoals texturen, meshes of shaders te tekenen. We moeten het aantal van deze draw calls in onze game minimaliseren omdat te veel hiervan problemen kan veroorzaken zoals frameratedalingen of hapering. Er zijn veel manieren om dit op te lossen, maar dingen zoals het batchen van meerdere objecten in een enkele draw call of het verminderen van het aantal unieke texturen en materialen kunnen allemaal helpen. Dit is vooral belangrijk voor mobiel, omdat er zoveel verschillende apparaten op de markt zijn, allemaal met verschillende technische specificaties.
Wat Zijn De Belangrijkste Programmeertalen Voor Games?
De meeste van onze tijd als dagelijkse game-programmeurs wordt besteed aan het scripten in een van een reeks programmeertalen - we zijn tenslotte softwareontwikkelaars van een ander soort. Er zijn veel talen om uit te kiezen. Sommige lijken gemakkelijker dan andere, maar als je er eenmaal een hebt geleerd en meester bent, kun je zeker andere leren - de grootste uitdaging is om binnen te komen.
Hier is een introductie tot enkele van de meest populaire programmeertalen voor games:
- C# - een veelzijdige en populaire programmeertaal die veel wordt gebruikt in game-ontwikkeling. Het is een van de gemakkelijkste om op te pakken als je een beginner bent. Een van de beste eigenschappen is automatische garbage collection - dus het beheert geheugenallocatie voor jou - zeer nuttig voor drukke programmeurs zoals wij.
- C++ - daarentegen is dit een unmanaged taal, dus je moet handmatig geheugen toewijzen en vrijgeven, wat een grotere stap is in complexiteit en moeilijkheid. Het biedt echter wel meer snelheid, controle en prestaties.
- Java - net als C#, heeft Java zijn eigen geheugenbeheer en garbage collection, waardoor het gemakkelijker is voor ontwikkelaars om geheugen te beheren zonder te verdrinken in de details. Het wordt veel gebruikt in web-ontwikkeling en zakelijke applicaties, en hoewel het (misschien) niet de topkeuze is voor game-ontwikkeling, blijft het een solide optie voor het creëren van schaalbare en efficiënte applicaties.
- Swift - dit is Apple's eigen taal voor het bouwen van apps en games voor iOS en macOS. Dit betekent echter dat het minder nuttig is voor cross-platform ontwikkeling - omdat we ernaar streven om onze mobiele games altijd zowel op Android als iOS te publiceren.
Hoe Word Je Een Game-programmeur?
Er zijn verschillende manieren waarop je een game-programmeur kunt worden. Mijn route is nogal conventioneel - ik studeerde Games Design en Programming aan de University of Staffordshire. Oorspronkelijk dacht ik dat ik in game-kunst zou gaan - ik was altijd al gepassioneerd door kunst als kind, plus ik genoot echt van de kunstmodules op de universiteit, maar terwijl ik daar was ontdekte ik dat ik echt genoot van het creëren van gameplay. Het kon me meerdere dagen kosten om een enkel hoogpolig model te maken, maar ik kon een eend laten vliegen en exploderen in de helft van de tijd. Prototyping laat me het resultaat snel voor mijn ogen zien.
Het mooie aan het programmeren van games is echter dat het toegankelijk is voor de meeste mensen, zelfs als je niet via een traditionele route komt. Ik had vrienden op de universiteit van 50+ - het is nooit te laat om iets nieuws te ervaren. Bij Kwalee hebben we zelfs iemand aangenomen die voornamelijk via YouTube-video's leerde en een game maakte voor de lol. Er zijn tegenwoordig zoveel kansen voor nieuwe en enthousiaste talenten. Als we naar portfolio's van nieuwere studenten kijken, hebben ze al zoveel meer onder de knie. We zien fantastisch talent binnenkomen en het is een spannende tijd in de industrie.
Een vraag die je waarschijnlijk wilt stellen - zal AI invloed hebben op programmeren als carrière? Het kan erg nuttig zijn en het wordt steeds beter. Perfect als je iets uitgelegd wilt hebben of vastzit in een probleem. Je kunt het gebruiken om bugs op te lossen of je code opnieuw in te delen ('schoonmaken') door het in de nieuwste ChatGPT te plakken. Maar als we naar portfolio's kijken, willen we het werk zien dat je hebt gedaan en waar je trots op bent. AI is prima om te gebruiken, maar probeer het niet als vervanging voor je eigen vaardigheden te gebruiken.
Hoe Ziet Een Typische Dag Van Een Game-programmeur Eruit?
Laat me een voorbeeld geven op basis van mijn leven. Ik ben een Lead Programmer (ik noem het mijn droombaan) dus het is een geweldige mix van hands-on en het beheren van andere programmeurs!
Een typische dag in mijn wereld is binnenkomen, een latte halen, vervolgens dubbele controleren op bugs of blokkades voor het QA-team. Controleer met het team of iemand me iets nodig heeft om hun werk te deblokkeren. Dan gaat de muziek aan en de takenlijst omhoog. We delen voortgangsvideo's via slack om snel feedback te krijgen, terwijl we ook heen en weer springen tussen 2-3 projecten om leden van mijn team te ondersteunen. We besteden ook veel tijd aan het investeren in gedeelde systemen om onze programmering efficiënter te maken - alles moet regelmatig onderhouden, bijgewerkt en gerepareerd worden om alles soepel te laten draaien.
Beginner Tips Voor Game-programmeren
Als je net begint en de ambitie hebt om een volleerd programmeur te worden, hier zijn mijn beginner tips!
- Er is zoveel te leren online, op YouTube, en er zijn zoveel voorbeeldgames dat je geen excuus hebt om niet te leren! De populaire engines zijn gratis en leuk om te gebruiken!
- Aan de andere kant van het spectrum, het is misschien 30 jaar oud, maar je zou het invloedrijke boek "Design Patterns: Elements of Reusable Object-Oriented Software" van de zogenaamde Gang of Four auteurs moeten lezen, dat enkele van de fundamenten van gamepatronen introduceerde die we dagelijks in programmering gebruiken.
- Je hebt misschien je eigen ideeën, maar begin simpel zodat je vertrouwd raakt met de basis.
- Als je niet vastzit aan een commercieel project, kun je zoveel code schrijven als je wilt, dus veel plezier met het creëren van waanzinnige dingen.
- Het opbouwen van een portfolio is echt belangrijk (en het is hoe ik mijn baan heb gekregen). Maar wees heel voorzichtig om niet gewoon hetzelfde oude standaard uni-werk te uploaden, want we zien veel applicaties met deze. Zelfs het besteden van een extra dag aan het reskinnen en toevoegen van meer functies zal je helpen opvallen.
- Het maken van je eigen echte wereldgame is ook een slim idee - het kost heel weinig om een game in Google Play te krijgen, dus breng iets uit dat je kunt laten zien aan recruiters/uitgevers/familie/huisdieren op je telefoon. Je kunt zelfs een paar duizend dollar per jaar verdienen totdat je een exclusieve fulltime baan hebt, dat is een bonus! Of het zou je kunnen verleiden om je eigen volledige game te maken en samen te werken met een uitgever.
- Leer niet alleen over programmeren - leer over kunst, design, QA en andere disciplines waarmee je zult communiceren. Bijvoorbeeld, het is de moeite waard om QA-methoden te begrijpen omdat je in de val kunt lopen om aan te nemen dat iets werkt, maar je moet het spelen als een gebruiker, niet als iemand die de code heeft geschreven en een bepaald beeld heeft van hoe je verwacht dat het 'moet worden gespeeld'. Wees vernietigend, probeer de willekeurige dingen te doen die mensen kunnen doen, druk op willekeurige knoppen en ander bizar gedrag.
Tips Voor Gevorderde Programmeurs
Hier zijn enkele van de tips die me hebben geholpen om van junior naar programmeur, tot senior tot lead te gaan.
- Je kunt altijd profiteren van meer leren, en onthoud dat zonder fouten we niet kunnen leren!
- Als je echt gepassioneerd bent over iets, kun je meer gespecialiseerd worden. Bijvoorbeeld, als je graag speelt met shaders en render pipelines, leer meer over het gebruik van grafische shaders om je vermogen om complexe visuele effecten te renderen uit te breiden en gebruik render pipelines om de prestaties te optimaliseren of om geweldige effecten te maken.
- Je zou iets heel cools kunnen maken, zoals een complex systeem, upload het naar een asset store om het te tonen als je contract het toelaat en laat je geavanceerde werk zien. Je zou een niche kunnen ontwikkelen als een bepaald type programmeur, zoals een gameplay programmeur, server programmeur, grafische programmeur of multiplayer programmeur.
- Alternatief kun je, zoals ik, de managementroute volgen en mensen mentor worden. Mijn tactiek voor het bevorderen van mijn carrière is geweest om nieuwe verantwoordelijkheden te absorberen. Eerst begon ik met het verbeteren van kleinere dingen, i.e. kleine workflow veranderingen.. Toen maakte ik processen gemakkelijker door sjablonen te gebruiken om tijd te besparen bij het maken van nieuwe projecten. Vervolgens kreeg ik een voorproefje van mentorschap en management, wat me hielp meer vertrouwen te krijgen en nu deel te nemen aan peer reviews, code reviews, workshops organiseren en teams leiden op projecten.
Of je nu als onderdeel van een team werkt of als manager, het is net zo belangrijk om lof te geven als om constructieve kritiek te geven. Bij het beoordelen van code is het goed om mensen enthousiast te maken!
Wat Zijn De Belangrijkste Principes Van Game-programmeren?
Er zijn enkele belangrijke onderwerpen die gewoon in een blog over game-programmeren moeten worden opgenomen. Dit zijn enkele van de belangrijkste dingen die we overwegen.
Versiebeheer/Broncodebeheer
Net zoals je save-punten hebt in games, zijn er save-punten in projectontwikkeling. Ze fungeren als algemene opslag voor het project en betekenen dat drie of vier programmeurs tegelijkertijd aan een systeem kunnen werken, een wijziging kunnen aanbrengen en deze naar de server kunnen pushen. Het stelt ons in staat om die veranderingen bij te houden en eenvoudig terug te draaien als er iets kapot zou gaan. Als twee ontwikkelaars werken aan hetzelfde bestand, wordt dat bestand onderdeel van een samenvoeging. Als er conflicten zijn, kunnen we deze handmatig oplossen of de wijzigingen van een individu toepassen. Dit zal vaak voorkomen bij het gebruik van Voorkeuren of Scènes binnen Unity.
Deze termen overlappen soms, maar over het algemeen richt broncodebeheer zich op de code en versiebeheer omvat alle projectbestanden, assets en documentatie.
Als je voor het eerst met versiebeheer begint, kan het een beetje eng zijn om te beginnen, het kan heel overweldigend lijken en als het gaat om conflicten, kun je je onzeker voelen over wat je moet doen. Maar de aard van versiebeheer helpt je momenten in de tijd op te slaan, dus als je frequent updates doet en gedetailleerde commitberichten gebruikt, is het ongelooflijk nuttig en veilig. Je kunt terugkeren naar meerdere punten, meerdere takken hebben, enz. Denk aan het als het veiligheidsnet van de ontwikkelaars, zodat we een versie van Pixar's Toy Story 2 kunnen vermijden - per ongeluk verwijderd en vervolgens hersteld van een harde schijf in het huis van hun technisch directeur, in plaats daarvan is het allemaal veilig daar op de server.
Objectgeoriënteerd programmeren
Dit is het type programmeren dat we voornamelijk gebruiken bij Kwalee. Het gebruikt objecten om echte dingen of abstracte concepten te vertegenwoordigen en streeft ernaar om de codebasis te organiseren met behulp van principes die weerspiegelen hoe we objecten in de echte wereld zien en ermee omgaan. Het helpt complexe systemen te onderhouden door de code te organiseren in afzonderlijke klassen die je gemakkelijker kunt hergebruiken, schalen en onderhouden.
Natuurlijk is er discussie of het goed is of niet. Hoewel het niet de hoogste prestaties biedt, werkt het goed. Net zoals bij talen, heeft elk zijn eigen voor- en nadelen en je moet er een leren om mee te beginnen en grip te krijgen op hoe talen en compilers (vertalers van menselijke code naar machinecode) werken. Je kunt ook andere typen overwegen, zoals functioneel programmeren dat het meer als wiskunde behandelt, logica programmeren dat feiten en regels gebruikt of procedureel programmeren dat stapsgewijze gegevens gebruikt.
**Programmeerp[/patterns]
Dit zijn geweldige nuttige dingen - herbruikbare oplossingen die kunnen helpen bij veelvoorkomende problemen waarmee je in je softwareontwerp te maken krijgt. Ze geven je een sjabloon om een probleem op te lossen, zodat je het wiel niet elke keer opnieuw hoeft uit te vinden en beproefde oplossingen kunt volgen.
Het Singleton-ontwerppatroon helpt je bijvoorbeeld ervoor te zorgen dat er slechts één instantie van een klasse zoals een game-instellingenmanager in je hele game is, en geeft je een globale toegangspunt ertoe. De code voor dit patroon betekent dat er slechts één instantie van de klasse SettingsManager bestaat, zodat je deze niet elke keer opnieuw hoeft te maken of te dupliceren wanneer je deze nodig hebt.
Er is ook het Factory Pattern dat je kan helpen objecten op een meer georganiseerde en flexibele manier te creëren. Je kunt methoden definiëren voor het genereren van specifieke soorten objecten, zoals karakters of items, op basis van invoerparameters, waardoor je eenvoudig meer objecten van een vergelijkbaar type kunt maken zonder elke keer opnieuw te beginnen.
Ik hoop dat deze blog je een voorproefje heeft gegeven van game-programmeren, of je nu nieuw bent in het veld of een ervaren programmeur bent! Als je een hardwerkende maar leuke persoon bent, pas je bij ons team, dus kom meer te weten over Kwalee carrières. Anders kun je meer te weten komen over onze mobiele games of uitgeven en meer te weten komen over wat we uitbrengen als ontwikkelaar en uitgever.








