Beginnen games maken

Bijna iedereen is wel een gamer. Of je nu casual mobiele games of AAA (grote) PC-games speelt, je kunt jezelf een gamer noemen. Games zijn natuurlijk heel leuk, een goede manier om je te ontspannen of te socializen. Maar het spelen van computerspellen is iets heel anders dan het zelf maken van games.

Zelf ben ik begonnen met gamedevelopment, het maken van games, toen ik 16 jaar oud was. Ik begon toen met het maken van games in Unity, een game engine, waar je later in dit artikel meer over zal lezen. Later, op 18-jarige leeftijd, studeerde ik zelfs gameprogrammeren in Breda. Je zou dus kunnen zeggen dat ik op meerdere manieren een introductie tot gamedevelopment heb gehad. Dit ging zeker niet zonder slag of stoot. In dit artikel lees je wat ik zelf heb geleerd en wat ik denk dat de beste manier is om aan de slag te gaan met gamedevelopment.

Programmeren & wiskunde

Is programmeerkennis een vereiste?

Ik heb vaker gelezen dat veel mensen zich afvragen hoeveel programmeerkennis je daadwerkelijk nodig hebt om games te maken. Ik moet sommigen teleurstellen: gamedevelopment vereist zeker enige kennis van programmeren. Hoewel er zeker manieren zijn om het aantal regels code in je game gering te houden (bijvoorbeeld met visual scripting) zal ik je aanraden om voor je begint met het maken van games een programmeertaal te leren.

Laat dit je echter niet demotiveren. Het leren van een programmeertaal valt heel erg mee en kan sneller dan je denkt (binnen drie dagen leer je al heel veel theorie). Het is veel makkelijker dan het lijkt. Daarnaast zijn er heel veel cursussen (dan niet veelal Engelstalig) die je een hele goede introductie geven tot (game)programmeren. Op dit platform, JorCademy, kun je bijvoorbeeld een snelle introductie krijgen tot programmeren met Scratch en Python. Beheers je echter het Engels en wil je je meer richten op een (spoed)cursus gameprogrammeren, kijk dan eens naar de introductie tot C#-programmeren van Brackeys. Meer informatie over beginnen met leren programmeren leer je in mijn eerdere blogpost: Hoe leer je programmeren (op de juiste manier).

Moet je goed zijn in wiskunde voor gamedevelopment?

Hier was ik eerder ook heel erg benieuwd naar. Met name omdat ik zelf ook niet de grootste wiskundige was op de middelbare. En als je kijkt naar de grote gamestudios, zoals Guerrilla Games in Nederland, zie je dat bij de vacatures voor de functie gameplay/engine-programmeur een grote wiskundekennis wordt vereist. Na de ervaringen die ik zelf had met gamedevelopment, kan ik wel stellen dat het heel erg ligt aan wat je wilt maken.

2D-games

Als je 2D-games wilt maken, zoals Super Mario Bros. en Flappy Bird, heb je niet veel intimiderende wiskunde nodig. Je dient wel je coördinaten te kennen (x- en y-as). Elk object binnen je game heeft een bepaalde positie binnen het speelscherm. Door de x- en y-positie van elk object binnen je game te beïnvloeden, met code, kun je ze over het speelscherm laten bewegen. Dit kun je op een aantal manieren doen, maar over het algemeen worden hier vectoren voor gebruikt (die ken je misschien wel van de wiskundeles). Ook dit is geen hogere wiskunde. Voor een 2D-game kun je bijvoorbeeld een Vec2 (met twee dimensies) gebruiken. Dit zie je in de pseudocode (simpele, leesbare code) hieronder terug.

SCHERM_BREEDTE = 800 // Breedte van het speelscherm in pixels (px)
SCHERM_HOOGTE = 600 // Hoogte van het speelscherm in pixels (px)

x = 400 // x-coordinaat object
y = 300 // y-coordinaat object

Vec2 positie = Vec2(x, y) // Positie binnen scherm: (400, 300) 

(...)

// Hieronder wordt de x per frame (vaak 60x per seconde) veranderd met +1
// Het object beweegt dus naar rechts
positie.x += 1 
Deze afbeelding is een ondersteuning voor de bovenstaande code. - games maken
Deze afbeelding is een ondersteuning voor de bovenstaande code. 

Verder ligt het een beetje aan hoe lastig je het voor jezelf wilt maken. Bij de meeste 2D-games heb je ook rotaties nodig. Je werkt dan ook nog eens met sinuscosinus en tangens. Als je in een engine werkt (zoals Unity of Unreal) is dit echter vaak voor je geautomatiseerd. Houd bij 2D-development dus vooral rekening met coördinaten en vectoren.

3D-games

Als je 3D-games, zoals Minecraft, wilt maken, wordt het een stukje lastiger. Je werkt dan met drie dimensies (vandaar ook 3D): x, y en z (diepte). Je werkt dan niet met een Vec2, maar met een Vec3. Hierdoor raak je misschien wat vaker in de war, vooral als je alleen 2D-games gewend bent, maar met name als je in een engine werkt is een groot deel voor jou geautomatiseerd: de achterliggende wiskunde is al voor jou gedaan. Wiskunde voor een 3D-game is dus lastiger dan voor een 2D-game, maarc in een engine nog altijd geen rocket science.

Als je zelf een engine wilt schrijven, is het een compleet ander verhaal. Je hebt dan heel veel programmeer- en wiskundekennis nodig. Je moet alle functionaliteiten binnen je game, zoals posities, rotaties, buffers etc. zelf maken. Ik heb zelf nog geen game engine geschreven (alleen een raytracing engine), maar ik heb zelf meegekregen dat je bij het maken van een engine meer bezig bent met technische aspecten dan het ontwikkelen van de gameplay.

Is een studie noodzakelijk?

Je vraagt je wellicht af of je gamedevelopment gestudeerd moet hebben om daadwerkelijk games te kunnen maken. Het antwoord hierop is: nee, natuurlijk niet. Er zijn genoeg gamedevelopers die heel goed zijn, maar dat zichzelf hebben aangeleerd. Het grootste deel van wat ik nu weet over gamedevelopment, heb ik geleerd door zelf te experimenteren en informatie te zoeken op internet. Daarbij zijn er genoeg cursussen op YouTube, maar bijvoorbeeld ook op GameDev.tv te vinden over gamedevelopment. Ook bieden engines, zoals Unity en Unreal, cursussen aan, waardoor je snel aan de slag kunt met de engine naar keuze. Een studie is dus absoluut niet noodzakelijk.

Dat gezegd hebbende, een studie zou je wel kunnen helpen bij gamedevelopment. Het leuke aan de gamedevelopment-opleiding die ik zelf een jaar lang heb gedaan, is dat je ook veel leert over gamedesign. Dit klinkt makkelijker dan het lijkt, maar ontwerp jij maar eens binnen een uur een level dat zowel uitdagend is als leuk om te spelen.

De bovenstaande video geeft goed weer wat game design precies inhoudt.

Mocht je toch een studie willen doen om meer te halen uit gamedevelopment, maar toch de zekerheid willen hebben voor een goede baan (binnen of buiten de gaming industrie), dan raad ik je aan om een Informatica-studie te doen. Dit wordt in de praktijk ook wel Computer Science genoemd. Je leert met name programmeren, wat je goed kunt gebruiken bij gamedevelopment. Ook bieden vooral veel universiteiten graphics-cursussen aan, waarbij de wiskunde wordt toegepast die je vaak ook nodig hebt bij (geavanceerde) gamedevelopment. 

Wel of geen engine?

Er is geen ‘één manier’ om games te maken, er zijn meerdere wegen naar Rome. De één nog moeilijker dan de ander. Je zou bijvoorbeeld gebruik kunnen maken van een engine of je eigen engine kunnen schrijven.

Unity

Vooral als je net begint zou ik je aanraden om geen eigen engine te schrijven (ook niet voor een 2D-game). Ik heb zelf het meest geleerd van het werken in een engine: Unity. Over het algemeen is Unity de populairste engine voor beginnende gamedevelopers: de ontwikkelomgeving is best gebruiksvriendelijk, het biedt ondersteuning voor meerdere platformen en is op vrijwel elke computer makkelijk te gebruiken (ook voor Macs).

Daarnaast werkt Unity met C#, een populaire programmeertaal, dat eerder is ontwikkeld door Microsoft. Hoewel Unity heel populair is onder beginnende programmeurs, worden er ook grotere, populaire games mee gemaakt. Hollow Knight, Monument Valley, Cuphead, Ori and the Blind Forest en Ori and the Will of the Wisps zijn voorbeelden van hele populaire games die in Unity zijn ontwikkeld. Een andere, opkomende engine is Godot. Ik heb hier niet zelf mee gewerkt, maar ik zie steeds meer gamedevelopers gebruik maken van deze engine.

Een video met meer info over Unity

Unreal Engine

Een wat meer geavanceerde engine is Unreal Engine. Deze engine werkt met de programmeertaal C++, een lastigere programmeertaal dan C#. Toch is Unreal voor grotere gamedevelopers geschikter om games te ontwikkelen. Games in Unreal Engine zijn over het algemeen ook indrukwekkender om te zien dan Unity-games. In tegenstelling tot Unity worden in Unreal Engine echt grote AAA-games ontwikkeld, zoals Batman: Arkham City, Final Fantasy 7 Remake, Yoshi’s Crafted World, The Pathless en Fortnite. De engine is ontwikkeld door Fortnite-ontwikkelaar Epic Games. Als je Unity onder de knie hebt en wilt overstappen op een geavanceerdere engine, is Unreal Engine misschien iets voor jou.

Een eigen engine

Ik raad een beginnende programmeur absoluut af om zelf een game engine te schrijven. Het schrijven van een eigen engine vereist veel wiskunde- (vooral voor 3D) en programmeerkennis. Als je al hebt gewerkt met Unity of Unreal Engine (met name laatstgenoemde) en wilt experimenteren met het schrijven van een eigen engine, raad ik je aan eens te kijken naar SDL2. Dit is een framework waarmee je een renderer, een game scherm, kunt opzetten en later eigen functionaliteiten kunt toevoegen.

SDL2 werkt voornamelijk met C++. Het voordeel van C++ is dat je je eigen geheugen kunt beheren. Dit klinkt voor een beginnende programmeur misschien lastig, maar simpel gezegd houdt dit in dat je een stukje geheugen kunt aanvragen en verwijderen wanneer je wilt. Als je dit goed doet, kun je je programma sneller maken. Hier wordt gelijk het grote voordeel van een eigen engine zichtbaar: flexibiliteit. Als engine developer kun je je eigen functionaliteiten implementeren. Als je later de gameplay gaat maken kun je alles uit de engine halen om de prestaties van je game te optimaliseren.

Deze video laat goed zien wat er mogelijk is in Unreal Engine 5.

Goede startersprojecten

Als je een game wilt maken, begin je met het stellen van een hele belangrijke vraag: wat ga ik maken? Een veelvoorkomend probleem is dat je geen inspiratie hebt om je eigen programma’s te bedenken en daar ben ik misschien wel het grootste voorbeeld van. Tijdens mijn gamedevelopment-studie van het afgelopen jaar hebben mijn leraren daar een goede oplossing voor gevonden. Er zijn zoveel goede klassieke games die er simpel uitzien en ook simpel werken, maar toch uitdagend zijn om te maken. Kies een leuke retrogame en maak die na. Je leert hiermee naast nieuwe programmeertechnieken gameplay en game design te analyseren, wat van pas komt als je op een gegeven moment je eigen game gaat ontwerpen.

Ik heb voor een academische opdracht Super Mario Bros. nagemaakt in C++.

Het namaken van al bestaande applicaties is een popuire strategie om een project te bedenken waar je beter van wordt. Dit geldt niet alleen voor gamedevelopment, maar bijvoorbeeld ook voor web- en appdevelopment. Ik heb onlangs bijvoorbeeld mijn eigen WordPress-website from scratch nagemaakt met HTML, CSS en Python. 

Mijn zelfgemaakte versie van JorCademy.nl - games maken
Mijn zelfgemaakte versie van JorCademy.nl

Conclusie

In dit artikel heb je heel wat informatie opgenomen. Kort samengevat kun je het best beginnen met leren programmeren, op basis van de programmeertaal die je nodig hebt. Bij Unity is dit C# (JavaScript wordt ook ondersteund, maar raad ik niet aan) en bij Godot C++ en C#. Ik raad dus aan dat je C# leert. Maak gebruik van de gratis C#-cursus van Brackeys, de GOAT op het gebied van Unity-development.

Als je de basis van C# kent, kun je aan de slag met Unity of Godot. Maak hier een aantal retrogames in na, zoals Super Mario Bros.AsteroidsThe Legend of Zelda (origineel) en Space Invaders. Als je denkt dat je 2D-games onder de knie hebt, kun je kijken of je een simpele 3D-game kunt maken. Of ontwerp je eigen game. Dit is misschien uitdagender en vereist meer creativiteit, maar daar leer je ook meer van. Je kunt zelfgemaakte games plaatsen op Itch.io. Dat deed ik zelf ook, kijk maar eens naar mijn itch-pagina (niet al mijn games staan hierop). Misschien kun je na verloop van tijd wel je eigen games op Steam releasen.

Wellicht heb je nog genoeg plannen met Unity. Blijf dan ook bij Unity, het is een geschikte engine voor leuke games. Maar als je 3D-games wilt maken met high-end graphics, kun je altijd nog overstappen op Unreal Engine. Epic heeft een speciale cursus ontwikkeld om de overstap van Unity naar Unreal Engine makkelijker te maken. Je kunt er natuurlijk ook voor kiezen om je eigen engine te maken, maar onthoud wel dat dit veel tijd, moeite en skills vereist.

Je zult in je eentje nooit in staat zijn om AAA-games als GTA en Horizon: Forbidden West te maken, maar dat betekent niet dat het niet mogelijk is om in je eentje een meesterwerk neer te zetten. Eric Barone, de ontwikkelaar van de hit Stardew Valley, heeft helemaal zelf een game gemaakt die succesvoller is dan veel grote games, gemaakt door grote studios. Ideeën zijn meer waard dan geld. Onthoud dat bij het maken van je eigen games.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.