6. Independent Camera met Smooth Following
Maak een independent camera script met smooth following en NodePath
Overzicht
De camera volgt nu het ruimteschip als een child node, maar je kunt dit veel professioneler maken! In dit hoofdstuk leer je hoe je een onafhankelijk camerascript maakt met smooth following en automatische oriëntatie.
Camera script
Maak de camera onafhankelijk van de Player hierarchy. Dit geeft je volledige controle over hoe de camera het schip volgt, en maakt smooth following mogelijk.
Nieuwe Godot-specifieke elementen:
NodePath- Een pad naar een andere node in de scene tree (bijv."../Player")GetNode<T>(path)- Haalt een node reference op via een NodePath
In Godot, versleep de Camera3D node uit de Player hierarchy naar de root (Level)
Sleep Camera3D naar Level in de hierarchy
De camera is nu een sibling van Player in plaats van een child
Rechtsklik op Camera3D en kies Attach Script
Configureer het script dialoog:
Language: C#
Inherits: Camera3D
Class Name: CameraController
Path: res://Scripts/CameraController.cs
Klik Create - het script opent in VS Code
Basis camera following
Maak eerst een simpele versie waar de camera direct het schip volgt (zonder smooth movement).
Nieuwe Godot-specifieke elementen:
[Export]- Maakt variabelen instelbaar in de InspectorGlobalPosition- De absolute positie in de wereld (vsPositiondie relatief is aan de parent)
Start met de basis class structuur:
Voeg een target variabele toe om de Player bij te houden:
Voeg een offset variabele toe (de camera positie relatief tot het schip):
Dit betekent: 3 eenheden omhoog, 6 eenheden naar achteren ten opzichte van het schip.
Voeg de
_PhysicsProcess()method toe:
Voeg de basic following code toe:
Zet de camera positie elke frame naar de positie van het schip plus de offset. Dit geeft hetzelfde effect als toen de camera een child was, maar nu heb je volledige controle!
Sla op en ga terug naar Godot
Build je project (ALT+B of klik het hamertje rechtsboven)
Selecteer de Camera3D node in de Scene Hierarchy
In de Inspector zie je nu nieuwe properties:
Target: Sleep de Player node hierheen
Offset: Staat al op (0, 3, 6)
Test met F6 - de camera volgt de speler!
Smooth following toevoegen
De camera volgt nu het schip, maar springt elke frame instant naar de nieuwe positie. Dit voelt nogal stijfjes aan. Gebruik lineaire interpolatie (lerp) om de camera geleidelijk te laten bewegen naar de gewenste positie.
Nieuwe Godot-specifieke elementen:
Vector3.Lerp(target, weight): In tegenstelling tot
Mathf.Lerp, kan je ook Lerp aanroepen op een Vector3. De Lerp functie berekent dan een interpolatie tussen de vector waarop je Lerp aanroept, en een target vector. De weight is nog steeds een waarde tussen 0 en 1 die bepaalt waar je je bevindt in de transitie.
Voeg een smoothSpeed variabele toe:
Vervang de instant following door smooth interpolation:
Oude code (verwijder dit):
Nieuwe code (voeg dit toe):
Bereken eerst waar de camera naartoe wil (desiredPosition), en gebruik dan Lerp() om geleidelijk in die richting te bewegen in plaats van er instant naartoe te springen.
Test met F6 - de camera volgt nu smooth! Probeer te draaien en te bewegen - de camera volgt vloeiend.
Experimenteer met smoothSpeed:
Bij
smoothSpeed = 5: camera beweegt snel, volgt het schip nauwkeurigBij
smoothSpeed = 2: camera beweegt langzamer, voelt cinematischer aanBij
smoothSpeed = 10: camera volgt bijna instant (minder smooth effect)
Pas Smooth Speed aan in de Inspector en test het verschil!
Camera oriëntatie met lookat
De camera volgt nu smooth, maar blijft altijd in dezelfde richting kijken. Als het schip draait of van richting verandert, zou het veel dynamischer zijn als de camera altijd naar het schip blijft kijken. Hiervoor gebruik je LookAt().
Nieuwe Godot-specifieke elementen:
LookAt(target, up)- Richt de camera automatisch naar een positietarget= Vector3 positie om naar te kijkenup= Vector3.Up definieert de "omhoog" richting (meestal (0,1,0))De camera draait automatisch zodat deze naar de target wijst
Voeg één regel toe aan het einde van
_PhysicsProcess():
LookAt() berekent automatisch de juiste camera rotatie om naar het schip te kijken. Gebruik Vector3.Up om te zorgen dat de camera rechtop blijft.
Test met F6 - de camera kijkt nu altijd naar het schip! Vlieg in een cirkel en zie hoe de camera het schip blijft volgen én ernaar blijft kijken.
Complete Script
Laatst bijgewerkt