7. Enemy Spawning
Spawn enemies op willekeurige locaties met een spawn systeem
Overzicht
In dit hoofdstuk implementeer je een spawn systeem dat enemies op willekeurige locaties in het level spawnt. Je leert hoe je Marker3D nodes gebruikt als spawn points, hoe je Timer nodes gebruikt voor recurring spawning, en hoe je random selection implementeert. Dit maakt je game dynamischer en uitdagender!
Spawn points setup

Maak spawn points in het level waar enemies kunnen verschijnen. Gebruik Marker3D-nodes - dit zijn onzichtbare "markers" die alleen een positie aangeven.
Open scenes/main.tscn
rechts-klik op de root node > Add Child Node
Zoek naar Marker3D. Marker3D nodes zijn perfect voor spawn points omdat:
Ze nemen geen rendering resources
Ze hebben een Transform (position, rotation, scale)
Ze zijn onzichtbaar in de game (alleen zichtbaar in editor met gizmo)
Klik Create
Hernoem deze naar SpawnPoint1
Positioneer SpawnPoint1 ergens in het level (bijvoorbeeld: Position (-10, 1, -5))
Herhaal deze stappen om meerdere spawn points te maken (bijv. SpawnPoint2, SpawnPoint3, SpawnPoint4). Plaats ze op verschillende locaties rond het level
Selecteer alle spawnpoints, en rechts-klik > Reparent
Zoek naar Node
Klik Create
Hernoem de nieuwe node naar SpawnPoints
Sla main.tscn op
Je scene hierarchy zou er nu zo uit moeten zien:
SpawnManager Node
De SpawnManager is een script dat de enemies spawnt op basis van een timer. Omdat een script niet zomaar los in een Godot scene kan bestaan, hebben we een Node nodig waar dit script aan vast gemaakt wordt.
In scenes/main.tscn, rechtermuisknop op Main root node > Add Child Node
Zoek naar Node. De SpawnManager heeft geen Node3D nodig, omdat de positie ervan niet uitmaakt.
Klik Create
Hernoem deze node naar SpawnManager
Rechtermuisknop op SpawnManager > Add Child Node
Zoek naar Timer
Klik Create
Selecteer de Timer node en pas hem aan in de inspector:
Wait Time: 3.0 (spawn elke 3 seconden)
Autostart: On (start automatisch)
One Shot: Off (blijft herhalen)
Sla main.tscn op
Je scene hierarchy is nu:
SpawnManager Script
Nu maken we het script dat de spawn logic afhandelt. De SpawnManager moet:
Alle spawn points vinden bij startup
De enemy scene laden
Elke X seconden een enemy spawnen op een random spawn point
Selecteer de SpawnManager node
Klik Attach Script
Language: C#
Class Name: SpawnManager
Path: res://scripts/SpawnManager.cs
Klik Create
Er zijn 2 variabelen nodig:
een Godot Array voor alle Spawnpoints
een referentie naar de Enemy Scene, om nieuwe enemies aan te maken
Sla het script op
Open scenes/main.tscn in de Godot Editor
Selecteer de SpawnManager node
In de Inspector, sleep je de spawn points vanuit de Scene Hierarchy naar de array:
Element 0: Sleep SpawnPoint1
Element 1: Sleep SpawnPoint2
Element 2: Sleep SpawnPoint3
Element 3: Sleep SpawnPoint4
Bij Enemy Scene: Klik op Assign > navigeer naar objects/Enemy.tscn
Sla main.tscn op
Spawn logic
De volgende stap is de spawn-logica: selecteer een random spawn point en spawn een enemy daar.
Open scripts/SpawnManager.cs
Maak een functie die een random spawn point kiest en een enemy spawnt
Kies een willekeurig spawnpoint uit de
_spawnPointsarray
Maak een nieuwe enemy aan op basis van de
_enemySceneop de locatie van het gekozen spawnpoint, en voeg deze toe aan de scene.
Sla het script op
Open scenes/main.tscn in de Godot Editor
Selecteer de Timer node (onder SpawnManager)
Ga naar het Node venster (naast Inspector)
Dubbelklik op het timeout() signal
Selecteer de SpawnManager node als ontvanger
Bij Receiver Method klik op Pick
Selecteer de SpawnEnemy method uit de lijst
Klik Connect
Sla main.tscn op
Test enemy spawning
Tijd om te testen! Verwijder de handmatig geplaatste enemy en test het spawn systeem.
Open scenes/main.tscn in de Godot Editor
Verwijder de handmatig geplaatste Enemy node (als die er nog staat)
Run de scene met F6
Je zou elke 3 seconden een nieuwe enemy moeten zien spawnen op een random spawn point!
Enemies zouden meteen naar je moeten kijken en schieten
Wanneer je ze neerhaalt, spawnt er automatisch een nieuwe!
Troubleshooting:
Geen enemies spawnen? Check of:
Enemy Scene reference is ingesteld in SpawnManager Inspector
Spawn Points array is gevuld met Marker3D nodes
Timer is ingesteld op Autostart: On
Enemies spawnen op (0,0,0)? Check of Marker3D nodes correct gepositioneerd zijn in de scene
Errors over Instantiate? Check of Enemy.tscn bestaat en correct is gesaved
"Index out of range" error? Check of de Spawn Points array Size overeenkomt met het aantal toegewezen spawn points
Complete scripts
Laatst bijgewerkt