De vorige les heb je de speler laten bewegen door te lopen. Deze les ga je ook springen toevoegen aan de manieren waarop de speler kan bewegen. Hiervoor ga je je eigen methode maken.


Tot nu toe heb je methodes gebruikt die al bij Unity horen: Start() en Update(). Je kan ook je eigen methodes maken. Dit doe je als je een aantal instructies hebt die bij elkaar horen en die je vaker wil kunnen gebruiken. Dit ga je nu doen voor het springen van de Player.

Typ onderaan in de class (dus op de regel voor het laatste } haakje in het script. Als er geen ruimte is kan je met enter ruimte maken) public void Spring(). Dit is de regel waarmee je de methode maakt. public zorgt ervoor dat je de methode overal kan gebruiken. void betekent dat de methode geen type heeft, maar dat is nu nog niet belangrijk om te weten. Spring()  is de naam die je aan de methode geeft. Na deze regel moet je net als bij de andere methodes { } haakjes neerzetten. Klik tussen deze haakjes en druk op enter om ruimte te maken waar je de instructies die bij deze methode horen neer kan zetten.


Springen werkt ongeveer als lopen, maar bij springen kan je alleen maar omhoog gaan in plaats van dat je rekening moet houden met of je naar links of rechts kan gaan. In de les over variabelen had je al een float variabele gemaakt met de naam SpringHoogte. Deze ga je nu gebruiken om de verticale velocity (snelheid) van de Rigidbody2D in te stellen.

Zet nu in de Spring() methode de regel ‘Body.velocity = new Vector2(Body.velocity.x, SpringHoogte);‘. Deze regel lijkt erg op de regel die je vorige les hebt gebruikt om de Player te laten lopen, maar in plaats van dat je de horizontale snelheid (X) verandert, verander je nu de verticale snelheid (Y) en laat je de X zoals hij al was.


De Spring() methode wordt niet zoals de Start() en Update() methodes automatisch uitgevoerd. Om zo’n methode te gebruiken moet je de naam van de methode in een methode die wel automatisch uitgevoerd zetten.

Dit moet weer gebeuren als je op een toets drukt, maar niet als je hem ingedrukt houdt, zoals bij het lopen. Daarom gebruik je een iets andere methode dan de Input.GetKey() die je vorige les hebt gebruikt: Input.GetKeyDown(). Deze is alleen waar (true) op het moment dat de toets voor het eerst wordt ingedrukt en daarna niet meer.

Zet deze weer in een if() in de Update() methode en zet tussen de haakjes weer een KeyCode. Als je met pijltje omhoog wil springen dan wordt het Keycode.UpArrow en als je met de spatiebalk wil springen dan is het KeyCode.Space. Op de volgende regel zet je Spring();. Dit is de instructie waarmee je de Spring() methode kan uitvoeren.

Het onderste deel van de Update() methode en de nieuwe Spring() methode moeten er nu zo uitzien:


Als je nu terug naar Unity gaat en in het Player script component in de inspector van het Player object de Spring Hoogte hebt ingesteld kan je als het goed is springen. Probeer verschillende spring hoogtes uit tot je een waarde vind waar je tevreden mee bent. Je kan ook de Gravity Scale (zwaartekracht) in het Rigidbody2D component aanpassen, zodat je minder hoog springt en sneller weer naar beneden valt.

Je zult nu ook zien dat elke keer dat je op de springtoets drukt dat je kan springen, zelfs als je nog in de lucht bent. Dit komt omdat je het script nu zo geprogrammeerd hebt dat elke keer dat je op die toets drukt de Player omhoog gaat. Om dit op te lossen moet je dus zorgen dat je pas weer kan springen als je weer op de grond bent geweest.


Om dit te doen maak je een variabele aan waarmee je bij kan houden of de Player op de grond is of niet. Voor dit soort dingen die waar (true) of niet waar (false) moeten kunnen zijn gebruik je een variabele van het type bool. Zet onder de andere variabelen de regel public bool OpDeGrond; om deze variabele te maken.


Eerst ga je deze variabele gebruiken om ervoor te zorgen dat als hij false is de Player niet meer kan springen. Dit doe je door bovenin de Spring() methode if(!OpDeGrond) neer te zetten en dan op de volgende regel return;. De ! in de if() betekent ‘niet’. Dus de volgende regel wordt alleen uitgevoerd als OpdeGrond niet waar is. De instructie op de volgende regel, return, zorgt ervoor dat de methode daar stopt en niet verder uitgevoerd wordt. De Player zal dan dus niet springen.

Zet nu onder de regel waarin de je Body.velocity aanpast de regel OpDeGrond = false;. Dit betekent dus dat de OpDeGrond variabele op niet waar wordt gezet en daardoor kun je dus niet meer springen als je een keer gesprongen hebt. De hele Spring()  methode ziet er nu dus zo uit:


Nu moet je er nog voor zorgen dat de Player wel weer kan springen als je weer op de grond terecht komt. Hiervoor gebruik je een methode die uitgevoerd wordt zodra je ergens tegen aan botst: OnCollisionEnter2D(). Dit is net als Start() en Update() een standaard methode die bij Unity hoort. Een trucje om deze methode te maken is door ‘oce2’ te typen en dan op enter te drukken. Dit zijn de hoofdletters en cijfers in deze methode en Visual Studio zal de rest voor je afmaken en de { } haakjes voor je neerzetten.

Zet dan in deze methode de instructie OpDeGrond = true;. Hierdoor zal de OpDeGrond variabele dus weer op waar worden ingesteld en daardoor kan de Player dus weer springen. De hele OnCollisionEnter2D() methode moet er nu dus zo uitzien:

Als je alles goed gedaan hebt kan je nu terug naar Unity gaan en zal de Player nog maar een keer kunnen springen.


In de laatste les van de basislessen ga je nog een probleem oplossen: Als je nu van de blokjes afvalt zal je blijven vallen. Je gaat er dus voor zorgen dat het level opnieuw begint als je valt. Klik hier om naar de volgende les te gaan.

Categorieën: Basislessen

Subscribe
Abonneren op
guest
0 Reacties
Inline feedbacks
Bekijk alle reacties