2. First-Person Camera
Implementeer mouse look en first-person camera beweging
Overzicht
In dit hoofdstuk implementeer je een first-person camera systeem met mouse look. Je leert hoe je mouse input verwerkt, camera rotatie beperkt, en de cursor captured voor FPS gameplay.
Input actions

Ga aan de slag met het bewegen en rondkijken van de speler. Daarvoor moet je eerst bepalen welke toetsen de speler hiervoor zal gebruiken. Zoals in de meeste andere games, gebruik je de WASD-toetsen.
Ga in Godot naar Project > Project Settings
Klik op het Input Map tabblad bovenaan
Bij Add New Action, typ move_forward en druk Enter
Klik op het + icoon naast "move_forward"
Druk op de W toets, klik OK
Herhaal voor de andere acties:
move_backward - toets S
move_left - toets A
move_right - toets D
Voeg eventueel ook de pijltjes toetsen toe, door een tweede toets aan elke actie toe te voegen
Sluit de Project Settings
Player scene setup

Ga in de menu naar Scene > New Scene
Kies voor 3D Scene
Rechts-klik op de Root node en klik op "Change Type"
Zoek naar CharacterBody3D en selecteer
Geef de root node de naam Player
Voeg een camera en CollisionShape toe aan de Player
rechts-klik > Add child: Camera3D
rechts-klik > Add child: CollisionShape3D
Shape: New CapsuleShape3D
Klik in de inspector op de CapsuleShape3D in de Shape property
Verander de Height (2) en Radius (0.5)
Ga naar de Transform property (onder Node3D) en verander de Y-position naar 1.0
Selecteer de Camera3D, en verplaats deze naar Position Y: 1.6 (ooghoogte)
Sla de scene op als res://objects/Player.tscn
Scene hierarchy:
PlayerController Script (Template)

Godot heeft handige script templates met basis functionaliteit. Gebruik de CharacterBody3D movement template als startpunt.
Selecteer de Player node
Klik op Attach Script (het 📜 icoontje met een +, bovenaan het Scene Hierarchy venster)
Language: C#
Template: CharacterBody3D: Basic Movement
Class Name: PlayerController
Path: res://scripts/PlayerController.cs
klik op Create
Het script opent automatisch in VS Code. De template bevat al heel wat code:
SpeedenJumpVelocityconstanten voor beweging_PhysicsProcess()method die elke physics frame wordt aangeroepenGravity implementatie met
GetGravity()enIsOnFloor()Jump detectie met
Input.IsActionJustPressed()Movement met
Input.GetVector()voor 4-richtingen inputMoveAndSlide()voor collision-aware movement
De template geeft al veel functionaliteit, maar pas het aan voor een first-person game.
Template input actions aanpassen
De template gebruikt momenteel Godot's built-in UI input actions zoals ui_left, ui_right, ui_up, en ui_down. Deze zijn handig voor snelle prototypes, maar voor een FPS game wil je je eigen WASD-controls gebruiken die we eerder hebben aangemaakt.
Zoek in
_PhysicsProcess()naar de regel met Input.GetVector:
Vervang deze met onze eigen input actions:
Variabelen aanpasbaar maken
De template gebruikt const voor Speed en JumpVelocity. Dit zorgt er onder andere voor dat je de code moet aanpassen telkens je de snelheid wilt veranderen. Met [Export] maak je variabelen zichtbaar in de Inspector - dit is veel handiger voor testen en tweaken, maar daarvoor mogen de variabelen niet langer const zijn.
Zoek bovenaan in je script naar de variabelen
SpeedenJumpVelocity.Verwijder het
const-keyword (dit heb je niet meer nodig)Maak ze
private(dit is ineens een goeie clean-code practice)Wijzig hun naam naar
_speeden_jumpVelocity. Zorg dat je de naam overal in het script verandert! TIP: door met je cursor op de variabele naam te gaan staan en opF2te drukken, kan je de naam ineens wijzigen in héél het document.
Camera referentie
Om de camera te kunnen bewegen, heb je een referentie naar de camera nodig. Zo kunnen we met code precies bepalen waar de camera zich bevindt en naar kijkt.
Voeg een nieuwe Camera3D variabele toe
Ga terug naar de Godot Editor, selecteer de Player, en sleep de camera naar het camera veld in de inspector.
Muis beweging
Zet beweging met de muis om naar camera of speler rotatie. In een FPS game werkt dit in twee assen:
Horizontaal (links/rechts) - Draai de hele speler (Y-axis rotatie)
Verticaal (boven/onder) - Draai alleen de camera (X-axis rotatie)
Voeg een private float variabele toe waarmee de gevoeligheid van de muis kan worden geregeld.
Voeg de
_Input()method toe onderaan de klasse.
In de
_Input()-methode, wil je weten of the@eventparameter van het typeInputEventMouseMotionis. Met behulp van deisoperator kan je het type van het event nakijken. We kunnen het daarmee ook meteen casten naar een nieuwe variablemouseMotionals dat zo is.
Als
@eventinderdaad een muisbeweging is, zet je die om naar een horizontale rotatie metRotateY().
Op diezelfde manier kan je die muisbeweging ook omzetten naar een verticale rotatie met
RotateX(). Voor omhoog/omlaag kijken draaien we alleen de camera.
Ook belangrijk: In een FPS beperk je best de verticale rotatie, anders kan je blijven draaien en ondersteboven kijken. Met behulp van de
Mathf.Clamp()functie kunnen we vastleggen dat die waarde niet groter of kleiner mag zijn dan een bepaalde waarde.
Voeg de
_Ready()method toe om de muis te capturen metInput.MouseMode.
De camera toewijzen aan de camera variabele
In de Godot Editor, selecteer de Player root node
Sleep de Camera3D in het Scene Hierarchy venster naar de Camera property in de inspector
Voeg player toe aan level

Open scenes/main.tscn
Instantieer de Player scene (sleep Player.tscn naar de scene)
Positioneer de speler op een platform (let op de Y positie)
Run de scene (F6)
Test de camera beweging
Arrow keys om te bewegen
Muis om rond te kijken
Complete playercontroller script
Laatst bijgewerkt