11. Car Pathfinding & Spawning

Implementeer car pathfinding met NavigationAgent3D en auto-spawning systeem

Overzicht

In dit hoofdstuk leer je:

  • Car.cs (CharacterBody3D) met NavigationAgent3D

  • Pathfinding met GetNextPathPosition()

  • Smooth rotation met Basis.Slerp()

  • Path length calculation via PathChanged signal

  • Money rewards bij bestemming

  • CarSpawner.cs timer-based spawning

  • Random building selection voor routes

  • Spawn position calculation (adjacent roads)

circle-info

Wat is een NavigationAgent?

Een NavigationAgent3D is een node die pathfinding automatiseert. Je geeft een target positie en de agent:

  1. Berekent het kortste pad via de NavigationMesh

  2. Geeft waypoints terug langs het pad

  3. Detecteert wanneer de destination is bereikt

In dit hoofdstuk:

  • Maak een Car scene met NavigationAgent3D

  • Implementeer movement door waypoints te volgen

  • Roteer smooth naar de bewegingsrichting

  • Bereken path length voor revenue

  • Maak een CarSpawner die automatisch cars spawnt tussen random buildings

  • Verdien geld wanneer cars hun bestemming bereiken

Complete gameplay loop: Player places buildings/roads → CarSpawner spawns cars → Cars navigate and earn money → Player builds more infrastructure

Car script aanmaken

Maak een nieuwe script voor het voertuig.

Nieuwe Godot-specifieke elementen:

circle-check

SetTargetPosition method

Maak een method om de destination in te stellen.

Nieuwe Godot-specifieke elementen:

circle-check

CalculatePathLength implementeren

Maak een method om de afgelegde afstand te berekenen (voor revenue).

Nieuwe Godot-specifieke elementen:

circle-check

_Ready implementeren

Koppel de PathChanged signal aan CalculatePathLength.

circle-check

_PhysicsProcess implementeren - Destination check

Implementeer de movement loop. Start met destination checking.

circle-check

_PhysicsProcess implementeren - Movement

Voeg movement toe door waypoints te volgen.

Nieuwe Godot-specifieke elementen:

circle-check

_PhysicsProcess implementeren - Rotation

Voeg smooth rotatie toe zodat de car naar de bewegingsrichting kijkt.

Nieuwe C#-specifieke elementen:

circle-check

Car scene opzetten

Bouw de Car scene met mesh, collision, en navigation.

circle-check

CarSpawner script aanmaken

Maak een script die automatisch cars spawnt.

Nieuwe Godot-specifieke elementen:

circle-check

_Ready implementeren (CarSpawner)

Maak een timer die periodiek cars spawnt.

circle-check

OnSpawnTimerTimeout implementeren

Maak een callback die fired elke keer dat de timer timeout.

Nieuwe C#-specifieke elementen:

circle-check

TrySpawnCar implementeren

Maak een method die een car spawnt tussen twee random buildings.

circle-check

GetBuildingPositions implementeren

Maak een method die alle building cells vindt.

circle-check

FindRoadNearBuilding implementeren

Maak een method die een adjacent road vindt naast een building.

circle-check

SpawnCar implementeren

Maak een method die de car instantiates en configureert.

circle-check

Helper methods toevoegen

Voeg utility methods toe voor random selection en tile checking.

circle-check

CarSpawner node toevoegen

Voeg de CarSpawner toe aan de Main scene.

circle-check

Testen

Test het complete systeem.

circle-check

Veelgemaakte fouten

  • Car beweegt niet: Controleer of NavigationAgent export is ingesteld. Check ook of er een geldig NavigationMesh is (hoofdstuk 10).

  • Car rijdt niet over roads: NavigationMesh is leeg of niet gekoppeld. Controleer RoadNavigation setup in hoofdstuk 10.

  • Car kantelt/valt om: Vergeet niet lookDirection.Y = 0 in te stellen. Rotatie mag alleen yaw hebben, geen pitch/roll.

  • Cars spawnen niet: Check of CarScene export is ingesteld. Check console voor errors. Verify dat er 2+ buildings EN adjacent roads zijn.

  • Cars spawnen in de lucht: FindRoadNearBuilding returnt Vector3.Zero (geen road gevonden). Plaats roads direct naast buildings.

  • Timer werkt niet: AddChild(_spawnTimer) vergeten. Timers moeten in de scene tree zitten om te werken!

  • GetRandomIndex crash: Buildings.Count < 2 check faalt. Verify de early return in TrySpawnCar.

  • Path length is altijd 0: CalculatePathLength() wordt niet aangeroepen. Check of PathChanged signal correct is verbonden in _Ready().

  • Slerp rotatie is te snel/langzaam: Pas RotationSpeed export aan (10.0 is standaard, hogere waarden = snellere draai).

Volledige scripts

chevron-rightKlik hier voor het volledige Car.cs scripthashtag
chevron-rightKlik hier voor het volledige CarSpawner.cs scripthashtag

Laatst bijgewerkt