Ingewikkeldheid: Unity 1 out of 5 stars C# 1 out of 5 stars

Benodigde Modules: Geen


In deze module ga je springveren maken waarmee de Player hoger kan springen dan normaal.


Om te beginnen heb je een plaatje van een springveer nodig of van iets anders dat passend zou zijn om als springplank te gebruiken. Hier zijn een paar voorbeelden, maar je kan natuurlijk ook zelf iets zoeken/maken.

   

Zet dit plaatje in je Assets en sleep het vanuit daar op de plaats in je level waar je het wil hebben.


Omdat het object dat je nu gemaakt hebt alleen nog maar een plaatje is moet je een component toevoegen om ervoor te zorgen dat de Player er tegen aan kan botsen. Dit is weer een Collider2D. Een Box Collider 2D werkt prima, maar een Edge Colider 2D werkt hiervoor ook goed. Zorg er als het nodig is voor dat het groene lijntje van de collider overeenkomt met het plaatje. Dit doe je door op de Edit Collider knop in het collider component te klikken en dan de collider aan te passen door de groene puntjes die verschijnen te verslepen.

Maak nu een C# script aan door met je rechtermuisknop in de Assets te klikken en naar Create -> C# Script te gaan. Noem dit script Springveer. Voeg het toe aan het Springveer object door het op het plaatje in het level te slepen. Open dan het script door er op te dubbelklikken.


Maak bovenin de class een public variabele aan van het type float en noem deze ‘SpringKracht’. De instructie om dit te doen is ‘public float SpringKracht;‘. Deze getal variabele ga je gebruiken om in te stellen hoeveel extra kracht de Player’s sprong krijgt wanneer de Player op de springveer springt.

De Start() en Update() methodes zijn niet nodig voor dit script, want er is niets dat aan het begin van het level hoeft te gebeuren of constant gedaan moet worden. Verwijder ook de { } haakjes die bij deze methodes horen, maar niet de { } haakjes die bij de class horen. Maak dan in de class de OnCollisionEnter2D() methode aan door ‘oce2’ te typen en dan op enter te drukken.

De OnCollisionEnter2D() methode wordt uitgevoerd op het moment dat iets tegen de collider van de springveer aanbotst. Voor nu moet er alleen iets gebeuren als datgene dat er tegen aanbotst de Player is. Je moet dus eerst weer checken of datgene de Player is. Dit heb je in de laatste basisles ook gedaan met het Gevaar script. Hiervoor gebruik je dus een if() met tussen de haakjes ‘collision.gameObject.GetComponent<Player>()‘. Dit is true als het object dat tegen dit object aanbotst een Player script heeft. De volgende regel wordt dus alleen uitgevoerd als de player tegen het object aanbotst.

Na deze if() moeten straks meerdere instructies komen, dus moet je op de volgende regels { }  haakjes zetten:


Om ervoor te zorgen dat je de springhoogte van de Player kan vermenigvuldigen met de SpringKracht variabele moet je de Spring() methode in de Player klasse iets veranderen. Je gaat hier een parameter aan toe voegen. Dit is een variabele die bij de methode hoort en die ingesteld wordt op het moment dat de methode gebruikt wordt. Parameters maak je aan tussen de ( ) haakjes na de naam van de methode.

Ga dus naar de Spring() methode in de Player klasse en zet daar tussen de ( ) haakjes achter de naam ‘float springkracht = 1‘. Door ‘= 1’ erachter te zetten wordt deze variabele standaard ingesteld op 1. Als we de spring hoogte met het standaard getal vermenigvuldigen blijft het dus hetzelfde. Parameters schrijf je meestal zonder hoofdletters, omdat het lokale variabelen zijn die je niet ergens anders in het script kan gebruiken.

Zet nu op de regel in de Spring() methode waar de Body.velocity ingesteld wordt achter SpringHoogte ‘* springkracht‘. Hiermee vermenigvuldig je de SpringHoogte met de springkracht parameter. Zorg er ook voor dat voor void bij de naam van deze methode public staat, zodat je het straks vanuit de Springveer klasse kan gebruiken.


Sla het Player script op en ga terug naar het Springveer script. Tussen de { } haakjes achter de if() in de OnCollisionEnter2D() kan je nu de aangepaste Spring() methode van de player aanroepen. Eerst moet je met collision.gameObject.GetComponent<Player>() het Player script van het object dat gebotst heeft ophalen en dan kan je door er een punt achter te zetten alles gebruiken dat daarbij hoort, inclusief dus de Spring() methode. Vergeet aan het eind van deze instructie de puntkomma ; niet!

Tussen de ( ) haakjes van deze methode kan je nu de springkracht parameter instellen. Dat doe je door de SpringKracht variabele die je in deze klasse hebt gemaakt ertussen te zetten. Het getal dat je straks bij SpringKracht instelt in Unity wordt dus doorgegeven als parameter om de spring hoogte van de Player mee te vermenigvuldigen.

Zet ten slotte op de regel boven de instructie waarmee je de Player laat springen ‘collision.gameObject.GetComponent<Player>().OpDeGrond = true;‘. Hiermee zorg je er voor dat de Player altijd zal kunnen springen wanneer hij de springveer aanraakt, ook als hij net gesprongen heeft.


Sla nu ook het Springveer script op en ga terug naar Unity. Stel hier in de Inspector van het springveer object de springkracht in op bijvoorbeeld 2 en probeer het uit!


Om de springveer helemaal af te maken kan je ook nog een simpele animatie toevoegen zodat het lijkt alsof de springveer omhoog schiet wanneer hij de Player lanceert. Hiervoor heb je weer een plaatje nodig:

Het is de bedoeling dat het plaatje van het Springveer object in dit nieuwe plaatje veranderd wanneer de Player er op springt en dan na een korte tijd weer terug veranderd in het oude plaatje. Om dit te doen moet je in het script twee plaatjes kunnen instellen. Dit doe je met variabelen van het type Sprite. Zet dus bovenaan in de Springveer klasse ‘public Sprite OudPlaatje, NieuwPlaatje;‘. Om in te stellen hoe lang de animatie duurt maak je ook nog een extra float variabele aan met de naam AnimatieTijd. Zet dit met een komma ertussen achter SpringKracht.

In de OnCollisionEnter2D() methode zet je nu binnen de { } haakjes die bij de if() horen ‘GetComponent<SpriteRenderer>().sprite = NieuwPlaatje;‘. Hiermee wordt het plaatje dat bij het object hoort veranderd in het nieuwe plaatje.


Om het plaatje weer terug te veranderen maak je een methode die dat kan doen. Deze methode is van het type void en noem je VeranderPlaatje(). Vergeet de . Tussen de { } haakjes die bij de methode horen zet je ‘GetComponent<SpriteRenderer>().sprite = OudPlaatje;‘.

In de OnCollisionEnter2D() methode, op de regel na de regel waar je het plaatje verandert zet je nu ‘Invoke(‘VeranderPlaatje”, AnimatieTijd);‘. De Invoke methode gebruik je om een andere methode vertraagd uit te voeren. Tussen de ( ) haakjes van deze methode zet je tussen ” ” aanhalingstekens de naam van de methode, dan een komma en dan een getal voor hoe lang het moet duren totdat de methode uitgevoerd wordt. Let er op dat je de naam van de methode precies hetzelfde spelt als je gedaan hebt toen je de methode maakte, inclusief hoofdletters.

Categorieën: Modules

Subscribe
Abonneren op
guest
0 Reacties
Inline feedbacks
Bekijk alle reacties