4. Input Actions en Basis Beweging
Leer Input Actions configureren en implementeer basis beweging met CharacterBody3D
Overzicht
In dit hoofdstuk breng je je ruimteschip tot leven! Je implementeert automatische voorwaartse beweging en 4-richtingen controle (links, rechts, omhoog, omlaag). Daarna voeg je een camera toe als child node die automatisch met het schip meevliegt.
Input actions configureren
Voordat je input kunt verwerken, moet je Input Actions definiëren in de Project Settings. Dit zijn benoemde acties (zoals "move_left") die je kunt koppelen aan toetsenbord keys, controller buttons, etc.
Ga in Godot naar Project > Project Settings
Klik op het Input Map tabblad bovenaan
Bij Add New Action, typ move_left en druk Enter
Klik op het + icoon naast "move_left"
Druk op de A toets (Q als je een AZERTY toetsenbord hebt), klik OK
Herhaal voor de andere acties:
move_right - toets D
move_up - toets W (Z als je een AZERTY toetsenbord hebt)
move_down - toets S
Sluit de Project Settings
Je hebt nu 4 input actions die je in code kunt gebruiken!
Voor Azerty gebruikers gebruik je de toetsen ZQSD. Godot zal dan de fysieke locatie gebruiken van de toets (bv. voor Z zal dit W (physical) zijn).
Camera toevoegen als child node
Voordat je beweging programmeert, heb je een camera nodig om te zien wat er gebeurt! Voeg een camera toe die automatisch met het schip meevliegt.
In Godot is de positie van een child node relatief aan de parent. Omdat de Camera3D een child wordt van Player, beweegt deze automatisch mee wanneer Player beweegt.
Selecteer de Player node in de Scene Hierarchy
Rechtsklik en kies Add Child Node
Zoek naar Camera3D en voeg deze toe
Selecteer de Camera3D in de hierarchy
Pas in de Inspector de Transform > Position aan:
X: 0 (gecentreerd)
Y: 2 (iets boven het schip)
Z: 5 (achter het schip)
Als je scene nog een losse Camera3D heeft (niet als child van Player), kun je deze verwijderen met Delete. Gebruik nu alleen de camera die met het schip meebeweegt.
Auto-forward movement implementeren
Laat het ruimteschip automatisch vooruit vliegen! Maak een variabele voor de snelheid en gebruik deze in _PhysicsProcess() om het schip te bewegen.
Nieuwe Godot-specifieke elementen:
[Export]- Maakt de variabele zichtbaar in de Inspector, zodat je de snelheid kunt aanpassen zonder code te wijzigenVelocity- EenVector3property die de snelheid van de CharacterBody3D bepaaltMoveAndSlide()- Beweegt de CharacterBody3D op basis van de Physics eigenschappen (zoalsVelocity) van de CharacterBody3D en detecteert collision met de omgevingTransform.Basis- De forward richting van het object in local space-forwardSpeed- Negatief omdat in Godot -Z = vooruit is_PhysicsProcess()- Wordt aangeroepen op vaste tijdsintervallen, perfect voor physics-based beweging
CharacterBody3D heeft ingebouwde physics. Door Velocity in te stellen en MoveAndSlide() aan te roepen, kan je schip nu dus botsen met obstakels en andere physics objecten.
Voeg een speed variabele toe bovenaan de class:
De [Export] attribuut maakt deze variabele aanpasbaar in de Godot Inspector.
Voeg de lege
_PhysicsProcess()method toe:
Maak een movement variabele aan:
Begin met een nul-vector (Vector3.Zero) en bouw de beweging stap voor stap op.
Voeg voorwaartse beweging toe:
Transform.Basis.Z geeft de forward richting van het schip. Vermenigvuldig met -_forwardSpeed omdat in Godot -Z = vooruit.
Pas de Velocity aan en beweeg met physics:
Velocity bepaalt de snelheid van de CharacterBody3D. MoveAndSlide() beweegt het schip en detecteert collisions.
Test met F6. Je ruimteschip vliegt nu automatisch vooruit!
Turning en vertical movement toevoegen
Voeg nu stuurbesturing toe! Het schip kan draaien (links/rechts) en omhoog/omlaag bewegen. Het schip beweegt altijd in de richting waar het naartoe wijst.
Nieuwe Godot-specifieke elementen:
Input.IsActionPressed()- Checkt of een input action momenteel ingedrukt is (geefttrueterug zolang de toets wordt ingehouden)Rotation- De yaw rotatie (draaien links/rechts) in radialen
Voeg twee nieuwe variabelen toe:
Voeg turning toe. Plaats dit na de forward movement, maar voor
Velocity = movement:
We passen Rotation.Y aan (yaw - draaien links/rechts). Vermenigvuldig met delta voor smooth, frame-rate independent rotatie.
Test met F6. Gebruik A en D - het schip draait!
Voeg verticale beweging toe. Plaats dit na de turning code:
Pas movement.Y aan om het schip omhoog en omlaag te laten bewegen.
Test met F6. Gebruik W/A/S/D - volledige controle!
Experimenteer met snelheden! Selecteer de Player node in Godot en kijk in de Inspector. Je ziet nu Forward Speed, Turn Speed en Vertical Speed dankzij [Export]. Pas de waarden aan en test opnieuw!
Boost functie toevoegen
Voeg een boostfunctie toe die het schip 20% sneller maakt wanneer je de spatiebalk indrukt.
Boost input actie
Voeg eerst de boost input actie toe aan je project. Ga naar Project > Project Settings > Input Map. Voeg een nieuwe actie toe genaamd "boost" en wijs de Spatiebalk toe.
Boost multiplier
Voeg een boost multiplier variabele toe:
Dit betekent dat het schip 1.2× (20%) sneller vliegt tijdens boost.
Boost toepassen
De boost werkt door de forward speed tijdelijk te verhogen. Pas de forward movement code aan.
Vervang de forward movement regel door een versie met boost check:
Oude code (verwijder dit):
Nieuwe code (voeg dit toe):
Maak een currentSpeed variabele die start op normale snelheid. Als de boost-toets is ingedrukt, verhoog je deze met de multiplier.
De volledige
_PhysicsProcess()ziet er nu zo uit:
Test met F6. Hou de spatiebalk ingedrukt - het schip gaat nu sneller!
Complete Script
Laatst bijgewerkt