In de vorige les heb je variabelen aangemaakt die nodig zijn om de Player te kunnen laten lopen. In deze les ga je die variabelen gebruiken om dit ook echt te laten werken.
Voordat je iets gaat programmeren is het altijd belangrijk dat je goed bedenkt wat je precies wil dat de computer gaat doen. De computer kan immers alleen precies doen wat je zegt. Voor het lopen van de speler kunnen we dus niet gewoon ‘loop naar links’ zeggen, want dat snapt hij niet. Hoe we het in het Nederlands zouden zeggen is: als er geen pijltjestoets ingedrukt is, beweeg dan niet. Als het pijltje naar links ingedrukt is, beweeg dan met de Loop Snelheid (De getal variabele die we vorige les gemaakt en ingesteld hebben) naar links en als het pijltje naar rechts ingedrukt is, beweeg dan met de Loop Snelheid naar rechts. Nu moet je dit nog in de computertaal zetten.
Kijken of er een toets is ingedrukt en dan de snelheid veranderen is iets dat de hele tijd door moet gebeuren. Daarom moet je de instructies voor het lopen neerzetten in de Update() methode. Om bij te houden of de player stil meot staan of naar links of rechts moet bewegen maak je een lokale variabele aan met de regel float xsnelheid = 0;. Een lokale variabele werkt als een variabele zoals we die bovenaan in de class aangemaakt hebben, maar kan alleen gebruikt worden in de methode waar hij in staat. Met float geef je aan dat het een getal is. Je geeft het de naam xsnelheid omdat het om de horizontale snelheid gaat. Met = 0 stel je de variabele in op 0. Het teken = kan je meestal zien als het woordje ‘wordt’ of als ‘wordt ingesteld op’.
Nu ga je iets nieuws gebruiken dat er voor zorgt dat afhankelijk van of iets waar of niet waar is een instructie of een groep instructies wel of niet worden uitgevoerd: de if (). Het woordje if is een Engels woord dat ‘als’ betekent. Tussen de haakjes zet je iets dat waar of niet waar is (true of false). Als het waar is voert de computer de volgende regel(s) uit en anders slaat hij ze over.
Zet nu if (Input.GetKey(KeyCode.RightArrow)) neer op de volgende regel. Omdat deze instructie nog niet klaar is hoeft er geen puntkomma ; achter. Input is een class waarin allerlei methodes en variabelen staan die te maken hebben met het toetsenbord, de muis en andere dingen die je gebruikt om de computer te besturen. Door een punt achter de naam van de class te zetten kan je al die dingen gebruiken. Hier gebruik je de GetKey() methode. Tussen de haakjes van die methode zet je de KeyCode van een toets op het toetsenbord. Als die toets ingedrukt is zal de methode true (waar) als resultaat geven en als hij niet ingedrukt is false (niet waar). KeyCode.RightArrow is de KeyCode van de rechter pijltjestoets.
De volgende regel die je hieronder zet wordt dus alleen door de computer uitgevoerd als de rechter pijltjestoets ingedrukt is. Zet hier deze regel neer: xsnelheid = LoopSnelheid;. Hiermee zorg je ervoor dat de getal variabele die je bovenin deze methode hebt gemaakt wordt ingesteld op dezelfde waarde als de LoopSnelheid variabele die je bovenin de class hebt gemaakt. In Unity heb je deze ingesteld op 5 en als de rechter pijltjestoets ingedrukt is wordt dus ook de xsnelheid op 5 ingesteld.
Om de andere kant op te gaan (dus naar links) moet de horizontale snelheid het tegenovergestelde zijn: -5. Om dit te doen zet je op de volgende regel weer bijna hetzelfde neer: if (Input.GetKey(KeyCode.LeftArrow)). In plaats van RightArrow zet je nu dus LeftArrow neer, omdat het nu om de linker pijltjestoets gaat. Zet daarna xsnelheid = -LoopSnelheid; op de volgende regel. Omdat LoopSnelheid eigenlijk gewoon een getal is kan je er gewoon een – voorzetten en dan wordt het -5 in plaats van 5.
Nu is de xsnelheid variabele dus goed ingesteld zoals je het zou willen: als er geen toets is ingedrukt is hij 0, als het rechter pijltje is ingedrukt is hij 5 en als het linkerpijltje is ingedrukt -5. Nu kan je deze gebruiken om de snelheid van het Player object in te stellen.
De snelheid van het Player object instellen doe je door een onderdeel van het RigidBody2D component te veranderen: de velocity. Dit is een Engels woord voor snelheid. De velocity is van het type Vector2. Een Vector2 bestaat uit twee onderdelen: X en Y. Dit heb je eerder gezien in het Transform component van game Objecten in Unity. De X was toen de horizontale positie van het object en de Y de verticale positie. Bij de velocity is de X is de horizontale snelheid en de Y is de verticale snelheid. Bij het lopen wil je alleen de X aan passen en de Y hetzelfde houden.
Om de velocity in te kunnen stellen gebruik je de Rigidbody2D variabele die vorige les hebt aangemaakt en Body hebt genoemd. De volgende regel wordt: Body.velocity = new Vector2(xsnelheid, body.velocity.y);. De = geeft aan dat de velocity opnieuw ingesteld wordt. Om een Vector2 opnieuw in te stellen moet je een nieuwe Vector2 maken en dat doe je met new Vector2(). Tussen de haakjes zet je (met een komma ertussen) de nieuwe waardes van X en Y. Voor X zet je dus de xsnelheid variabele die je eerder in de methode hebt gemaakt en ingesteld. Voor Y zet je body.velocity.y. Hierdoor stel je als nieuwe waarde bij de Y de oude waarde opnieuw in en blijft hij dus hetzelfde.
Als je alles goed gedaan hebt ziet de hele methode er nu zo uit:
Als dat zo is, sla dan het script op met Ctrl+S en test het uit in Unity! Experimenteer ook nog wat door de snelheid op verschillende dingen in de stellen, zoals 2, 10 of zelfs 100. Als je Player omvalt en dat niet de bedoeling is, klik dan in het Rigidbody2D component op Constraints en klik dan het vakje achter Freeze Rotation Z aan.
Je hebt nu de Player in de horizontale richting laten bewegen. Volgende les ga je leren hoe je de speler in de verticale richting kan laten bewegen: Springen! Klik hier om naar de volgende les te gaan.