Game Programming Guide - Tips, Tools and Careers

door Connor Taylor

Een gameprogrammeur is de persoon die de visie van een ontwerper omzet in iets dat daadwerkelijk werkt 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 af te handelen. We werken ook samen met game-artiesten om ervoor te zorgen dat onze games er geweldig uitzien en tegelijkertijd geweldige prestaties leveren op apparaten.

In deze blog deel ik essentiële inzichten en adviezen over het zijn van een gameprogrammeur, gebaseerd op mijn vijf jaar bij Kwalee. Ik neem je mee door enkele van de talen, tools en principes die we gebruiken, mijn carrièreadvies, evenals tips voor beginners en gevorderden.

Wat Doet Een Gameprogrammeur?

We schrijven de code en helpen de game werkelijkheid te worden. Terwijl gameontwerpers de concepten maken en game-artiesten de middelen creëren, zorgt een programmeur voor de functionele, speelbare ervaring. We creëren en optimaliseren de prestaties van de game en lossen eventuele problemen op die worden geïdentificeerd.

We zorgen ervoor dat een game geweldig aanvoelt en soepel presteert. Om dit te doen, moeten we ervoor zorgen dat de code zelf schoon en uitbreidbaar is, wat moeilijker is dan je denkt. We hanteren coderingsnormen om een consistente kwaliteit te behouden over al onze teams - een document dat mogelijk naamgevingsnormen, opmaak enz. bevat. Soms zijn dingen echter niet altijd zo eenvoudig en moet je soms buiten de gebaande paden denken om dingen op tijd gedaan te krijgen.

Onze verantwoordelijkheden omvatten ook ervoor zorgen dat de game goed werkt op de hardware van de eindgebruiker. Bijvoorbeeld in onze mobiele games, moeten we voorkomen dat oudere apparaten te warm worden, dus werken we samen met artiesten om het aantal draw calls te optimaliseren. Een draw call is een opdracht die wordt verzonden van de Centrale Verwerkings Eenheid (CPU) naar de Grafische Verwerkingseenheid (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 draw calls in onze game minimaliseren omdat te veel problemen kunnen veroorzaken zoals frame rate drops of stotteren. Er zijn veel manieren om dit op te lossen, maar dingen zoals meerdere objecten in één draw call groeperen of het aantal unieke texturen en materialen verminderen, 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 Game-programmeertalen?

Het grootste deel van onze tijd als dagelijkse game-programmeurs besteden we aan scripting in één van een reeks programmeertalen - we zijn tenslotte softwareontwikkelaars van een ander type. Er zijn veel talen om uit te kiezen. Sommige lijken eenvoudiger dan andere, maar zodra je er één hebt geleerd en beheerst, kun je zeker anderen leren - de belangrijkste uitdaging is een voet tussen de deur krijgen.

Hier is een introductie tot enkele van de populairste game-programmeertalen:

  • C# - een veelzijdige en populaire programmeertaal die veel wordt gebruikt in game-ontwikkeling. Het is één van de gemakkelijkste om op te pakken als je een beginner bent. Een van de beste kenmerken is automatische geheugenverzameling - 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 het een grotere stap maakt in complexiteit en moeilijkheidsgraad. Het biedt echter wel meer snelheid, controle en prestaties.
  • Java - zoals C#, Java heeft zijn eigen geheugenbeheer en garbage collection, wat het gemakkelijker maakt voor ontwikkelaars om met geheugen om te gaan zonder te veel in de details verstrikt te raken. Het wordt veel gebruikt in webontwikkeling en enterprise-toepassingen, en hoewel het misschien (bij wijze van spreken) niet de beste keuze is voor game-ontwikkeling, blijft het een solide optie voor het creëren van schaalbare en efficiënte toepassingen.
  • 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 - aangezien we erop gericht zijn onze mobiele games altijd op zowel Android als iOS uit te brengen.

Hoe Word Je Een Gameprogrammeur?

Er zijn verschillende manieren om een gameprogrammeur te worden. Mijn route is vrij conventioneel - ik studeerde Games Design en Programming aan de University of Staffordshire. Aanvankelijk dacht ik dat ik in de gamekunst zou terechtkomen - ik was als kind altijd erg gepassioneerd door kunst, bovendien genoot ik erg van de kunstmodules aan 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 high poly 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 me zien.

Het mooie van games programmeren 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 heeft geleerd en een game heeft gemaakt voor de lol. Er zijn zoveel kansen voor nieuw en gretig talent tegenwoordig. Als je naar portfolio’s van nieuwere studenten kijkt, hebben ze zoveel meer onder de riem. We zien fantastisch talent doorkomen en het is een spannende tijd in de industrie.

Een vraag die je waarschijnlijk graag wilt stellen - zal AI programmeren als carrière beïnvloeden? Het kan ontzettend handig zijn en het wordt steeds beter. Perfect als je iets uitgelegd moet hebben of vastzit in een probleem. Je kunt het gebruiken om bugs op te lossen of je code te refactoren ('op te schonen') door het in de nieuwste ChatGPT te plakken. Maar wanneer we naar portfolio’s kijken, willen we het werk zien dat je hebt gedaan en waarop je trots bent, AI is prima om te gebruiken, maar probeer het niet als vervanging voor je eigen vaardigheden te gebruiken.

Hoe Ziet Een Typische Dag In Het Leven Van Een Gameprogrammeur Eruit?

Laat me een voorbeeld geven gebaseerd op mijn leven. Ik ben een Lead Programmer (ik noem het mijn droombaan), dus het is een geweldige mix van hands-on en het managen van andere programmeurs!

Een typische dag in mijn wereld is om binnen te komen, een latte te halen, en dan dubbel te controleren of er bugs of obstakels zijn voor het QA-team. Controleer bij het team of iemand iets nodig heeft om hun werk te deblokkeren. Dan gaat de muziek aan en gaat de takenlijst omhoog. We delen voortgangsvideo's via slack om snel feedback te krijgen, terwijl we ook schakelen tussen 2-3 projecten om leden van mijn team te ondersteunen. We besteden ook veel tijd aan het investeren in gedeelde systemen om ons programmeren efficiënter te maken - het moet allemaal regelmatig worden onderhouden, geüpdatet en gerepareerd om alles soepel te laten verlopen.

Tips Voor Beginners In Gameprogrammering

Als je net begint en streeft naar een volledig ontwikkelde programmeur, hier zijn mijn beginners 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 zijn erg leuk om te gebruiken!
  • Aan de andere kant van het spectrum, het mag dan 30 jaar oud zijn, maar je zou het invloedrijke boek "Design Patterns: Elements of Reusable Object-Oriented Software" van de zogenaamde Gang of Four-auteurs moeten proberen te lezen, dat enkele van de fundamenten van game-patronen introduceerde die we dagelijks in programmeren gebruiken.
  • Je hebt misschien je eigen ideeën, maar zorg ervoor dat je simpel begint zodat je met de basis gegrond bent.
  • Als je niet gebonden bent aan een commercieel project, kun je zoveel code schrijven als je wilt, dus heb veel plezier met het maken van waanzinnige dingen.
  • Een portfolio opbouwen is echt essentieel (en het is hoe ik mijn baan kreeg). Maar wees heel voorzichtig om niet zomaar hetzelfde oude standaard werk van de universiteit te uploaden, omdat we veel sollicitaties met deze zullen zien. Zelfs een dag extra besteden aan reskinnen en extra functies toevoegen zal je helpen opvallen.
  • Het maken van je eigen echte wereldspel is ook een slimme zet - het is heel goedkoop om een spel op Google Play te krijgen, dus breng iets uit dat je kunt laten zien aan recruiters/uitgevers/familie/huisdieren op je telefoon. Je kunt misschien zelfs een paar duizend dollar per jaar verdienen totdat je je vestigt met een exclusieve fulltime baan, dat is een bonus! Of het kan je verleiden om je eigen volwaardige spel te maken en samen te werken met een uitgever.
  • Leer niet alleen over programmeren - leer over kunst, ontwerp, QA en andere disciplines waarmee je in contact zult komen. Het is bijvoorbeeld 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 gedefinieerd beeld heeft van hoe je verwacht dat het 'gespeeld zou moeten worden'. Wees destructief, probeer de willekeurige dingen die mensen kunnen doen, druk op willekeurige knoppen en ander bizar gedrag.

Gevorderde Programmeur Tips

Hier zijn enkele van de tips die me hebben geholpen van junior, naar programmeur, naar senior naar 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 - zou je meer gespecialiseerd kunnen worden. Bijvoorbeeld, als je dol bent op het spelen met shaders en render pipelines, leer dan meer over hoe je grafische shaders kunt gebruiken om je vermogen om complexe visuele effecten weer te geven uit te breiden en gebruik renderpipelines om de prestaties te optimaliseren of om geweldige effecten te creëren.
  • Je zou iets echt cools kunnen maken, zoals een complex systeem, het uploaden naar een asset store om het te laten zien, als je contract dit toestaat, en je gevorderde werk laten zien. Je zou een niche kunnen ontwikkelen als een bepaald type programmeur, zoals een gameplay programmeur, server programmeur, graphics programmeur of multiplayer programmeur.
  • Als alternatief kun je de management route volgen, zoals ik, en mensen coachen. Mijn tactiek om mijn carrière te bevorderen was om nieuwe verantwoordelijkheden op te nemen. Eerst begon ik kleinere dingen te verbeteren, d.w.z. kleine workflow veranderingen.. Toen maakte ik processen makkelijker door sjablonen te gebruiken om tijd te besparen bij het creëren van nieuwe projecten. Toen kreeg ik een voorliefde voor mentorschap en management, wat me hielp meer zelfvertrouwen te krijgen en nu deel te nemen aan peer reviews, code reviews, workshops geven en teams leiden bij projecten.

Of je nu als onderdeel van een team werkt of als manager, het is net zo belangrijk om lof te geven als het geven van constructieve kritiek. Bij het beoordelen van code is het goed om mensen op te peppen!

Wat Zijn De Belangrijkste Principes Van Game-programmeren?

Er zijn enkele kernonderwerpen die absoluut in een blog over game-programmeren moeten worden opgenomen. Dit zijn enkele van de belangrijkste zaken die we overwegen.

Source Control/Version Control

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 wijzigingen te volgen en gemakkelijk terug te draaien als er iets kapot zou gaan. Als twee ontwikkelaars aan hetzelfde bestand werken, wordt dat bestand onderdeel van een samenvoeging, als er conflicten optreden kunnen we deze vervolgens handmatig oplossen of de wijzigingen van een individu kiezen om toe te passen. Dit gebeurt vaak bij het gebruik van Prefabs of Scenes binnen Unity.

Deze termen overlappen soms, maar over het algemeen richt bronbeheer zich op de code en versiebeheer omvat alle projectbestanden, middelen en documentatie.

Wanneer je voor het eerst Source Control gaat gebruiken, kan het in het begin een beetje eng aanvoelen, het kan erg overweldigend lijken en als het op conflicten aankomt, weet je misschien niet wat je moet doen. Maar de aard van versiebeheer helpt je om momenten in de tijd op te slaan, dus als je vaak updates uitvoert en gebruik maakt van gedetailleerde commit-berichten, is het ongelooflijk handig en veilig. Je kunt terugkeren naar meerdere punten, meerdere branches hebben, enz. Zie het als het veiligheidssysteem van ontwikkelaars, zodat we een versie van Pixar's Toy Story 2 kunnen vermijden - per ongeluk verwijderd en vervolgens hersteld van een harde schijf bij de technisch directeur thuis, in plaats daarvan is het allemaal veilig daar op de server.

Objectgeoriënteerd programmeren

Dit is het type programmeren dat we bij Kwalee vooral gebruiken. Het gebruikt objecten om echte dingen of abstracte concepten te vertegenwoordigen en streeft ernaar de codebase te organiseren volgens principes die weerspiegelen hoe wij objecten in de echte wereld zien en ermee omgaan. Het helpt complexe systemen te onderhouden door code te organiseren in afzonderlijke klassen die je eenvoudig kunt hergebruiken, schalen en onderhouden.

Natuurlijk is er discussie over of het goed is of niet. Hoewel het niet de hoogste prestaties levert, werkt het goed. Net als bij talen heeft elk zijn eigen voor- en nadelen en zou je er een moeten leren om te beginnen en een goed begrip te krijgen van hoe talen en compilers (vertalers van mensencodes naar machinecodes) werken. Je kunt ook andere types overwegen, zoals functioneel programmeren, dat meer als wiskunde behandelt, logisch programmeren, dat feiten en regels gebruikt, of procedureel programmeren, dat stapsgewijze gegevens gebruikt.

Programmeermodellen

Dit zijn wonderbaarlijk nuttige zaken - herbruikbare oplossingen die kunnen helpen met veelvoorkomende problemen die je in je softwareontwerp tegenkomt. Ze geven je een sjabloon om een probleem op te lossen, zodat je niet elke keer opnieuw het wiel hoeft uit te vinden en beproefde oplossingen kunt volgen.

Het Singleton ontwerpmodel bijvoorbeeld helpt je ervoor te zorgen dat er maar één instantie is van een klasse, zoals een game instellingen manager in je hele game, en biedt je een wereldwijd toegangspunt tot deze. De code voor dit patroon betekent dat er maar één instantie van de SettingsManager-klasse bestaat, zodat je deze niet elke keer opnieuw hoeft te maken of te dupliceren wanneer je deze nodig hebt.

Er is ook het Factory Patroon dat je kan helpen objecten op een meer georganiseerde en flexibele manier te maken. Je kunt methoden definiëren voor het genereren van specifieke typen objecten, zoals karakters of items, op basis van invoerparameters, waardoor je eenvoudig meer objecten van een vergelijkbaar type kunt maken zonder elke keer opnieuw vanaf nul 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 hardwerkend maar leuk persoon bent, zou je in ons team passen, dus ontdek meer over Kwalee carrières. Anders kun je leren over onze mobiele games of publiceren en meer te weten komen over wat we vrijgeven als ontwikkelaar en uitgever.

Over de auteur:

Connor Taylor, Lead Game Programmer bij Kwalee, bloeit op in het maken van games en het bevorderen van een ondersteunend, leuk team. Met 5+ jaar ervaring heeft hij hits zoals Jetpack Jump gecreëerd en mentort hij anderen in Unity-ontwikkeling.

Gerelateerde artikelen

Deel dit artikel: