• No results found

Racing Game

N/A
N/A
Protected

Academic year: 2022

Share "Racing Game"

Copied!
38
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Racing Game

2020-2021

Naam: Hube Knaepkens

Klas: T3EI6

(2)

Voorwoord

Het voorwoord staat weliswaar helemaal vooraan in je GIP, maar het is wel het laatste deel dat je schrijft. Je schrijft je voorwoord wanneer alles klaar is

Deadline: [tbd]

• alinea 1: Je stelt jezelf voor en deelt mee in welke studierichting je zit.

• alinea 2: Je vermeldt het onderwerp van je GIP zonder al veel van de inhoud te verklappen. Als je stage een wezenlijk onderdeel uitmaakt van je eindwerk, kan je dat hier aangeven.

• alinea 3: Je bedankt de personen die je hebben begeleid bij je eindwerk.

Denk daarbij aan je stagementor, vakleraar… Vermeld zeker ook hun titel en/of functie en let op de juiste schrijfwijze van hun naam.

(3)

Inhoudstafel

Voorwoord ... 2

Inhoudstafel ... 3

1 Inleiding ... 4

2 Blokschema ... 5

3 Situatieschetsen ... 6

4 Componenten ... 7

5 Game Design ... 11

5.1 Project aanmaken ... 11

5.2 Functies / Animaties ... 12

5.2.1 Checkpoint system ... 12

5.2.2 HUD animatie ... 13

5.2.3 Respawn vehicle ... 15

5.3 Map design ... 15

6 Controllers ... 16

6.1 Joystick controller ... 16

6.2 CAR controller ... 18

6.2.1 Frame ... 18

6.2.2 Stuur + Pedalen ... 19

6.2.3 LED-strip ... 20

6.2.4 Dashboard ... 20

7 Besluit ... 21

8 Problemen ... 22

8.1 Joystick output error ... 22

9 Gebruikte bronnen ... 23

10 Bijlagen ... 24

10.1 Unreal Engine 4 ... 24

10.2 Arduino C ... 35

(4)

1 Inleiding

Voor mijn GIP heb ik besloten om een Racing Game te maken met bijhorende controllers. Met één van de controllers kan je de game

besturen via joysticks en met de andere controller is een race omgeving waar je in kan zitten en de game besturen.

Dit eindwerk lijkt me een goede uitdaging en het bereid me ook goed voor op wat ik wil gaan verder studeren, namelijk game development. Ik voel me ook zeer gemotiveerd om voor dit GIP te werken.

Ik heb dit project aangepakt door eerst een werkend prototype van mijn game te maken. Hierna heb ik de controllers gemaakt. Als laatste heb ik de game er wat mooier laten uitzien.

(5)

2 Blokschema

Mijn eindwerk wordt een zelf gemaakt race game in Unreal Engine 4, dat kan bestuurd worden met home made controllers. één van de controllers word gemaakt van een Arduino Pro Micro, 2 joysticks, drukknoppen en een 3D geprinte body. De andere controller is een race omgeving dit

pedalen en een stuur, een led-strip die van kleur verandert afhangend van de snelheid. Er is ook een dashboard waar je de gevoeligheid van het stuur kan aanpassen met 2 drukknopen. Dit word dan weergegeven op een E-paper.

(6)

3 Situatieschetsen

Dashboard

(7)

4 Componenten

In dit deel van mijn scriptie ga ik de componenten die ik overwogen heb met elkaar vergelijken. Ook worden de componenten die ik uiteindelijk gekozen heb hier uitgelegd.

De eerste vraag die ik mezelf heb gesteld is: Waar ga ik de game op laten draaien? Deze vraag was totaal niet moeilijk, omdat ik wist dat ik Unreal Engine 4 ging gebruiken. Deze software werkt alleen op een computer.

Ook is een computer tot bijna iedereen beschikbaar.

Voor de game controllers had ik een micro controller nodig. Ik had twee logische keuzes, een Raspberry Pi of een Arduino. Ik heb de kenmerken van de 2 vergeleken. Ik moest de controllers in een controller verwerkt krijgen dus moest ik de kleinste versie van de Raspberry Pi of Arduino pakken. Ik heb uiteindelijk de Raspberry Pi Zero W en de Arduino Pro Micro vergeleken.

Kenmerken Van de Raspberry Pi Zero W:

Prijs: € 11,50

De Raspberry Pi heeft Input / Output pinnen en een micro USB voeding, perfect voor mijn toepassing. Ik zou er nog wel een GPIO header op moeten solderen als ik deze zou willen gebruiken. De prijs is ook redelijk.

De Raspberry Pi heeft geen ADC ingebouwd.

(8)

Arduino Pro Micro kenmerken:

Prijs: € 17,23

De Arduino heeft ook alle dingen die ik nodig heb voor een controller. De Arduino kost een beetje meer dan de Raspberry Pi. Deze controller heeft al wel voor gesoldeerde GPIO pinnen. Het grootste voordeel van de

Arduino is dat deze een ADC ingebouwd heeft. Een ADC dient om analoge componenten in te lezen, zoals mijn joystick.

Besluit:

Ik heb toch voor de Arduino Pro Micro gekozen omdat ik een Joystcik librarie heb gevonden die ik kan gebruiken om de controller te

programeren, ook heb ik als eens joysticks geprogrameerd in Arduino C.

Omdat ik de Arduino gebruik heb ik dus ook geen ADC nodig

Tenslotte gebruik ik voor de eerste controller 2 drukknoppen en 2 joysticks. Ik heb de goedkoopste Arduino compatibele knoppen en joysticks gepakt met goede reviews omdat dit voldoet voor mijn toepassing.

Hieronder ziet u de kenmerken van de joystick:

(9)

Dit zijn de kenmerken van de drukknop:

Voor mijn race omgeving heb ik een aantal dingen nodig. Beginnend met een stuur en pedalen waar potentiometers inzitten. Een vriend van mij had nog een paar liggen die hij

niet nodig had dus heb ik die van hem overgekocht. Het werkt op 5V van een usb 2.0 connectie. Er staan verschillende drukknoppen op die ik niet gebruik, ik heb alleen de potentiometers in het stuur en de pedalen nodig. Deze is dus perfect voor mijn

toepassing

Voor mijn dasboard heb ik ook 2 drukknoppen nodig, ik gebruik hiervoor de druknoppen die u op de vorige pagina kon zien. Ik bestel er hier dus nog 2 van bij.

Op mijn dashboard heb ik ook nog ene E-paper waar ik de gevoeligheid op display. Ik had hier keuze tussen verschillende resoluties en of het een kleur display was. Ik heb gekozen voor een resolutie van 200 x 200 omdat dit groot genoeg was voor mijn toepassing. Ik heb voor d kleur display gekozen in plaats van de zwart-wit versie omdat dit wat mooier is voor het oog, de kleur versie koste ook maar 50 cent meer.

(10)

Voor de kooi waar je in gaat zitten heb ik gekozen om de frame te

gebruiken die nog op het school stond waar ik in het 4de middelbaar aan heb gewerkt voor een ander project dat niet meer word gebruikt. Ik heb deze volledig gedemonteerd tot er alleen nog de frame en stoel over was.

Rond de frame hangt een RGB led-strip die van kleur verandert

naargelang de acceleratie van de auto in de game. Op school lag er nog ene led-strip die ik mocht gebruiken dus heb ik die ook gebruikt omdat deze geschikt is voor mijn toepassing. Hieronder ziet u de specificaties:

De led strip werkt met de PWM output van de arduino.

De led strip heeft ook een 5V externe PSU nodig. Die hadden we ook nog op school liggen. De PSU die ik gebruik is 5V/3A.

Dit is voldoende voor mijn led strip van 2 meter zolang is maar geen wit stuur, wat ik trouwens niet nodig heb voor mijn

toepassing.

In de frame moet natuurlijk een beelscherm bevestigt worden. Hiervoor ben ik naar de ICT dienst van het school gegaan en heb ik een scherm meegekregen. Het is een standaard scherm met een resolutie van 1080x1920 en het heeft een refreshrate van 60Hz.

(11)

5 Game Design

Om een game te maken heb je eerst een game engine nodig. Hiervoor heb ik Unreal Engine 4 gekozen. Dit is een welbekende engine. Fortnite, Rocket League en vele andere bekende games zijn met deze engine gemaakt.

Ook is dit de engine die word gebruikt in de hogeschool waar ik naar toe wil gaan.

Unreal engine is een grafische programeer omgeving die gebaseert is op C++. Dit wil zeggen dat je voor bepaalde schriftelijke regels code

grafische blokken op je scherm hebt. UE4 geeft ook de optie om zelf C++

code te schrijven en dit te importeren.

5.1 Project aanmaken

Om een nieuwe game (word project genoemt in UE4) te maken open je eerst Unreal Engine 4. Daarna klik je op New Project en selecteer je de Vehicle Advanced preset.

Als je deze preset hebt geselecteert moet je nog de volgende opties aanklikken. Bij het eerste kies je of je een game wilt maken voor

(12)

computers en consoles of mobile. Ik maak men game voor destop dus selecteer de optie Desktop / Console. Bij het tweede kies je de grafische kwaliteit waar je de game in wilt hebben. Ik heb een best krachtige pc en ik wil dat mijn game er mooi uit ziet dus kies ik voor de optie Maximum Quality. Daarna heb je nog de optie om te kiezen of je starter content wil of niet. Hier klikte ik With Starter Content omdat dit makelijker is om

alleen een game te maken zodat ik al wat basis materialen, obstakels, etc.

Nadat je al die opties hebt doorlopen moet je nog de plaats waar je het project wilt opgeslagen hebben. Ook moet je het project nog een naam geven. Neem een schijf waar veel plaats is om je project op te slagen want dit kan enkele Gb’s groot worden.

Als je dit allemaal hebt gedaan klik je op Create Project. Nu is je project aangemaakt en klaar om te beginnen designen.

5.2 Functies / Animaties

In de loop van het maken van mijn game heb ik heel wat functies en animaties ontworpen. Ik zal hieronder de belangrijkste dingen aanhalen.

De volledige code vind u onderaan bij bijlagen.

De Vehicle Advanced preset komt al met een werkende auto model en wereld settings zodat deze optimaal zijn voor een race game te

ontwerpen. Als eerste heb ik alles in map die mee word gegeven met de preset verwijdert tot dat er alleen nog maar een simpel vlak overbleef met een skybox.

5.2.1 Checkpoint system

Daarna heb ik een checkpoint systeem gemaakt. Het checkpoint systeem zijn vuur cirkels waar je in de juiste richting moet door rijden om te te activeren. Als je door alle checkpoints bent gereden heb je een ronde afgelegt.

(13)

Hierboven zie de algemene code om het checkpoint systeem te laten werken. Er zijn nog heel wat bijhorende functies maar die leg ik hier niet uit. Je kan deze wel onderaan in de bijlage vinden.

De code word geactiveert als je auto overlapt met de hitbox van het

ckeckpoint m.a.w. door de checkpoint rijden. Dan checkt de code of je wel in de juiste richting door de checkpoint bent gereden. Dit doet hij door je snelheid en de oreëntatie van de wereld op de x-as te vergelijken met 0.

Als deze condition True is word het checkpoint gecleared en word de checkpoint onzichtbaar.

5.2.2 HUD animatie

In de rechtse boven hoek heb ik een kader waarin belangrijke dingen worden weergegeven.

Daarnaast heb ik ook nog een slide in kader gemaakt als je een nieuw lap record of race record hebt.

Dit heb ik allemaal gemaakt in HUD blueprint. Deze kan je trugvinden in

(14)

Eerst maakte ik in de mijn kader ontwerp. Daarna gebruikte ik de timeline om er animaties van te maken indien nodig. De software spreekt redelijk voor zichzelf hier en is niet moeilijk te volgen.

In mijn kader heb ik heel wat variabelen staan. Deze heb ik vooraf

aangemaakt en functies geschreven zodat deze werken. In dit stukje code update ik deze variabelen naar de HUD blueprint functies. Die

functies zal ik niet aanhalen maar vind je trug in de bijlagen.

(15)

5.2.3 Respawn vehicle

De respawn vehicle functie laat de auto respawnen als deze

ondersteboven ligt zodat je niet heel de game moet restarten. Als je ondersteboven ligt en je beweegt niet word je trug naar het vorige checkpoint geteleporteert.

In deze code gebruik ik de functie respawnvehicle die ik heb aangemaakt en voor ze uit als de auto ondersteboven ligt. De variabele Respawn Location = vorige checkpoint.

5.3 Map design

(16)

6 Controllers

6.1 Joystick controller

Voor mijn joystick controller heb ik 2 drukknoppen voor aan de controller en 2 joysticks midden op de controller. Ik

gebruik de Arduino Pro Micro om de inputs van mijn componenten om te zetten in een output dan mijn computer via usb kan inlezen als virtuele controller.

Als eerste stap heb ik een 3D model gemaakt van mijn controller in Autodesk Inventor. Ik heb deze laten 3D printen. Hierna heb ik op een breadboard een prototype van mijn controller gemaakt. Eerst ga ik de werking van een joystick uitleggen.

Een joystick bestaat uit 2 potentiometers die een analoog signaal naar de output pinnen stuurt. De waardes gaan van 0 – 1023. Deze waardes kunnen onze arduino inlezen

doormiddel van een ingebouwde ADC.

Hier zal ik dan ook kort de werking van een ADC uitleggen. Een ADC staat voor Analoog Digitaal converter. Een ADC zet dus analoge

signalen om in digitale getallen, deze kunnen dan worden opgeslagen als data of verwerkt worden in software. Een ADC heeft 2 hoofd functies, en deze zijn samplen en kwantiseren. Over een bepaalde tijd worden samples genomen van het analoge signaal dat er word binnengekregen. Een ADC heeft een aantal metingen per seconde. Dat heet samplerate. Bij elke sample meet de ADC de waarde van het analoge signaal en zet dit om in binaire getallen. Nu komen we bij de 2de hoofd functie, kwantiseren. Een ADC kan je vergelijken met een voltmeter: deze meet bij elke sample het analoog signaalniveau. Dit getal wordt afgerond en geeft een binair getal op de output. Het afronden word kwantiseren genoemd. Bij een ADC kan je de bitdiepte kiezen, deze bepaalt tot hoeveel getallen na de komma er wordt afgerond.

(17)

drukknoppen. In de code gebruik ik een simpele if/else statement om te zeggen, als deze knop ingedrukt word moet op de virtuele joystick knop … ingedrukt worden. Ik gebruik knop 7 en 8 op de virtuele joystick. Als je nu de Arduino aansluit op de computer met een USB naar micro USB kabel werkt de controller nog niet. Je moet eerst de controller nog kalibreren in Windows. Dit doe je door naar Configure USB controller te gaan in

Windows settings. Na een simpele kalibratie werkt de controller naar

behoren. Je kan nu de auto in de Racing Game besturen met de controller.

Hier zal ik het belangrijkste stukje code toelichten. Dit stuk code leest eerst de analoge waardes van de joystick af en zet dit om naar een

joystick positie (0-1023,255-0). De laatste lijn code zorgt er voor dat deze positie naar een virtuele joystick geschreven word. Deze virtuele joystick kan windows begrijpen. De volledige code vind u onderaan in bijlagen.

(18)

6.2 CAR controller

Als tweede controller heb ik een race auto omgeving met stuur, pedalen en dashboard. Dit is allemaal verwerkt in een alluminium frame waar een scherm en speakers in hangen. Achter de stoel staat de computer waar de game op draait. Hieronder ga ik elk onderdeel apart bespreken.

6.2.1 Frame

Als eerste had ik een frame nodig voor alles in te

monteren. In het 4de middelbaar hadden we met de klas een project tijdens engineering waar we een gokart op zonnenpanelen gingen maken. Dit project is niet

afgeraakt tijdens het jaar maar de frame was wel gemaakt. Niemand gebruikte dit nog dus was het de perfecte donor voor mijn project.

Om de frame aan te passen naar mijn project ben ik begonnen met alles te demonteren van motoren, assen, lagers, zonnenpanelen, etc. Na dit gebeurd was heb ik een computer scherm van het school er in gemonteerd.

Er was al een perfecte houder voor het scherm alleen moest ik nog een plaat lasercutten om het scherm op te bevestigen.

In bovenstaande foto zie je de bevestigingsplaat die ik ontworpen heb om het scherm te kunnen bevestigen aan de frame. De plaat schuift tussen de twee grote horizontale balken. Langs onders is er een gat in de plaat om

(19)

6.2.2 Stuur + Pedalen

In mijn race omgeving hoort er natuurlijk ook een stuur met bijhorende pedalen. Deze zijn afkomstig van een xbox 360. Om ze te laten werken met mijn game heb ik al onnodige draden los geknipt en de draden die ik wel nodig had heb ik verlengd en naar een arduino micro omgeleid.

Voor deze ik controleer heb ik dezelfde library gebruikt als mijn joystick controller. Ik heb hetzelfde principe gebruikt alleen heb ik de joystick potentiometers vervangen door de potentiometers van het stuur en de pedalen. In onderstaande Foto zie je de loop die mijn code doorloopt.

Zoals bij de joystick controller lees ik de potentiometers in met dezelfde code. Als mijn rem pedaal ingedrukt wordt van waarde 100 – 500 is de virtuele knop 8 ingedrukt. Dit heb ik in mijn game gemapt naar de rem.

Als de rem pedaal helemaal word ingedrukt (waarde > 500) wordt de virtuele knop 8 losgelaten en gaat de gaspedaal variabele naar -100

worden gezet. Dit komt overeen met achteruit rijden. Door deze code kan je door de rempedaal licht in te drukken om te remmen en als je de

(20)

6.2.3 LED-strip

In de frame hangt ook een ledstrip die verandert van kleur afhankelijk van de versnelling van de auto. Dit betekent hoe meer de gaspedaal ingedrukt is, hoe roder de led-strip word. De led-strip gaat van groen naar rood.

Om mijn led-strip aan te sturen gebruik ik de FastLED library. In

bovenstaande code zie je de formule: Color = (30 – (POTgas/2). Deze formule heb ik bedacht om mijn ledstrip van groen naar rood te laten gaan afhankelijk van de positie van de gaspedaal. Dit heb ik gedaan door verschillende waardes te testen en te kijken welke kleur ze weergaven.

Dan heb ik een verband gezocht met mijn gaspedaal waarden en heb ik de formule bedacht. De for-loop print de variable Color naar elke led.

6.2.4 Dashboard

Onder het stuur zit ook nog een

dashboard bevestigt. Op dit dashboard staat een E-paper met 2 drukknoppen.

Met deze drukknoppen kan je de gevoeligheid van het stuur aanpassen en dit word dan procentueel

weergegeven op de E-paper.

(21)

7 Besluit

Deadline: [tbd]

• Per vraag van de inleiding geef je hier het antwoord, per probleem

omschrijf je een oplossing, zonder nog al te veel te argumenteren waarom dat zo is.

• Je kunt ook aanbevelingen geven voor de sector of voor het bedrijf of voor die personen die iets met je onderzoek/GIP willen doen. Doe dat wel

stijlvol, zonder persoonlijk te worden. Pas je kennis van voorzichtigheid via modaliteit toe.

(22)

8 Problemen

8.1 Joystick output error

Het eerste probleem dat ik tegen kwam was met mijn joystick controller.

De controller die ik gemaakt had werkte in andere games zoals Dirt 3, maar niet in mijn eigen game. Ik heb eerst geprobeerd in Unreal andere inputs te gebruiken, ipv de GamePad inputs, GenericController inputs te gebruiken.

Dit resulteerde in mijn auto die toertjes reed uit zijn eigen.

Ik ben er toen achter gekomen dat de game andere waardes binnenkreeg dan ik naar buiten stuurde met mijn controller. Toen heb ik in mijn

Arduino programma geprogrameert dat zodra ik mijn joystick naar een positie beweeg dat deze de uiterste toebehorende waarde pakte.

Bijvoorbeeld: je duwt de controller naar boven, stuurde ik meteen 255(max waarde) als uitgang op de y-as.

Dit werkte ook niet, Hier uit leerde ik dat er een fout was in het overgaan van Windows naar mijn game. Niet in mijn controller die foute waardes op de output gaf. Toen besloot ik mijn Xbox ONE controller aan te sluiten en zien of deze wel werkte met mijn game. De Xbox controller werkte perfect met mijn game. Ik heb dit probleem gegoogeld en heb geconcludeerd dat ik Windows moest laten denken dat mijn controller een Xbox controller was. Dus heb ik een Xbox controller emulator gedownload en in de game files geplaatst. Na een korte setup van mijn assen en knoppen te mappen werkt de controller nu volledig.

(23)

9 Gebruikte bronnen

https://forum.arduino.cc/index.php?topic=408812.0

https://www.analog.com/media/en/technical-documentation/dsp-book/dsp_book_Ch15.pdf https://www.youtube.com/watch?v=bDikklGx-tM

http://www.geekmomprojects.com/gyroscopes-and-accelerometers-on-a-chip/

https://github.com/MHeironimus/ArduinoJoystickLibrary

https://www.tweaking4all.nl/hardware/arduino/arduino-ws2812-led/

https://www.instructables.com/Getting-Started-With-E-Paper-Display- Modules/

https://forum.arduino.cc/index.php?topic=487007.0

https://www.waveshare.com/wiki/1.54inch_e-Paper_Module

https://www.youtube.com/watch?v=-XbwDC2AOOw&feature=youtu.be https://community.particle.io/t/e-ink-display-doesnt-work/36047

https://forum.arduino.cc/index.php?topic=485561.0 https://www.youtube.com/watch?v=OPaCF-XJhqc

(24)

10 Bijlagen

10.1 Unreal Engine 4

(25)
(26)
(27)

(28)
(29)
(30)
(31)
(32)
(33)
(34)
(35)

10.2 Arduino C

10.2.1 Joystick controller

(36)

10.2.2 CAR controller

(37)

10.3 Bestellijst CAR controller

50cm (2x) 45cm (1x) 96cm(x2) 139cm(x2)

AL008: afdekplaat voor profiel 45x45 (4x)

 AL053

 verstevigingsprofiel 45 - 360mm (2x)

 AL041

 zwee 45 verzinkt staal (6x)

(38)

Referenties

GERELATEERDE DOCUMENTEN

• Er moeten maatregelen getroffen worden voor het scheiden van publieksstromen, ook wat sanitaire voorzieningen betreft;. • U moet maatregelen treffen zodat u voldoet aan de

van de variantie en bleek het best voorspellende model. Het huisartsadvies werd in 56,8% van de gevallen opgevolgd en voor het zelfzorgadvies bleek dit percentage 60% te zijn.

Natuurlijk mogen die meer tactische lessen niet vergeten worden, maar de bijzon- dere missie naar Uruzgan levert de krijgsmacht ook andere kennis op.. De strijd in Afghanistan heeft

En van alle mensen die minstens één keer contactloos betaald hebben, geven de hogere leeftijdscategorieën zowaar aan er meer mee vertrouwd te zijn dan de groep jongeren (16-24

Na een jaar te hebben gewerkt met Rufix, ver- telt Ivo de Groot, directeur van Wolterinck, over zijn bevindingen: hoe je ermee werkt en waar het middel het beste kan

De Graaf, boomverzorger in de eigen bomenploeg van de gemeente Dronten, heeft twaalf exempla- ren van de Dendro Tree Wear aangeschaft voor boombescherming tijdens gemeentelijke

Gezien de achtergrond van de controller moet hij in staat worden geacht nieuwe besturingsconcep- ten door te voeren, nieuwe functies binnen de stafcapaciteit bijeen te brengen en

Zodra ik voel dat het niet lang meer kan duren, zodra ik voel dat mijn lever niet lang meer zal functioneren, kan ik terecht bij Wim Distelmans in het ziekenhuis van Jette.. Dat is