5. Breakable Blocks
Maak vernietigbare blokken met collision detection
Overzicht
In dit hoofdstuk maak je breakable blocks die de player kan vernietigen door er van onderaf tegenaan te springen (Mario-style). Je leert:
StaticBody3D gebruiken voor breakable blocks
Area3D positioneren voor bottom-detection
Signals verbinden via de UI
QueueFree() om nodes te verwijderen
Brick scene maken
Begin met een simpele brick-scene die later breakable wordt.
Ga naar Scene > New Scene
Selecteer Other Node en zoek naar StaticBody3D
Klik Create
Hernoem de root node naar Brick
Sla de scene op als res://objects/Brick.tscn
Waarom StaticBody3D? Dit is een physics body dat niet beweegt door gravity of forces, maar wel collideert met andere bodies - perfect voor platforms en breakable blocks.
Brick model toevoegen
Voeg nu het brick-model toe.
Open het FileSystem panel
Navigeer naar models/brick.glb
Sleep brick.glb naar de Brick root node in de Scene hierarchy
Het model wordt nu als child toegevoegd
Scene hierarchy:
CollisionShape3D Toevoegen
Elke physics body heeft een collision shape nodig.
Selecteer de Brick root node
Rechts-klik > Add Child Node > CollisionShape3D
In de Inspector van CollisionShape3D:
Shape > New BoxShape3D
Pas de BoxShape3D aan zodat deze het brick model bedekt
Sla de scene op
Scene hierarchy (updated):
Test de brick in de level
Voeg de brick toe aan de level om te testen.
Open scenes/main.tscn
Ga naar het File System venster, en sleep objects/brick.tscn in de scene
Positioneer de brick ergens in de level waar de player kan springen
Test met F5:
De player kan op de brick staan
De brick gedraagt zich als een normaal platform
Area3D voor Detectie

Maak de brick nu breakable door een Area3D toe te voegen die detecteert wanneer de player er van onderaf tegenaan springt (zoals in klassieke platformers).
Open objects/Brick.tscn
Selecteer de Brick root node
Rechts-klik > Add Child Node > Area3D
Hernoem de Area3D naar BreakDetector
Voeg een CollisionShape3D child toe aan BreakDetector
Geef de CollisionShape3D een BoxShape3D
Pas de BoxShape3D aan en positioneer aan de onderkant van de brick
Selecteer de BreakDetector node
In de Inspector, open de CollisionObject3D > Collision property
Zet Mask op 2 (en vink 1 uit)

Sla de scene op
Scene hierarchy (updated):
Brick script toevoegen
Maak nu een script voor de brick.
Open objects/brick.tscn
Selecteer de Brick root node
Klik op Attach Script
Language: C#
Template: Empty
Class Name: Brick
Path: res://scripts/Brick.cs
Klik Create
Godot maakt gebruik van een template script met een lege
_Processen_Readymethod. Deze methods hebben we voorlopig niet nodig, dus mag je ze verwijderen.Voeg een lege
Break()method toe:
BodyEntered Signal Verbinden
Verbind het BodyEntered-signaal van de BreakDetector aan je Break()-methode via de UI.
In objects/Brick.tscn, selecteer de BreakDetector (Area3D) node
Ga naar het Node tabblad in de Inspector (naast de Inspector tab)
Dubbelklik op het body_entered(body: Node3D) signal
In het "Connect a Signal" venster:
Receiver Method:
Break(type dit in)Zorg dat Brick geselecteerd is als receiver node
Klik Connect En pas de signature van
Break()aan naar:
Test de signal connection
Test eerst of de signal correct verbonden is.
Test met F5:
Spring onder de brick door en raak hem van onderaf
Check de Output console (onderaan in Godot)
Zie je "Brick broken!" in de console?
Loop bovenop de brick - geen output! (correct, de Area3D zit onderaan)
Brick verwijderen
Voeg nu de code toe om de brick echt te verwijderen.
Pas de
Break()method aan:
Wat doet QueueFree()? Dit verwijdert de node aan het einde van het huidige frame - veiliger dan Free() omdat het wacht tot alle processing klaar is.
Test met F5:
Spring onder de brick door en raak hem van onderaf
De brick verdwijnt!
Loop bovenop de brick - hij breekt NIET (dit is correct!)
Meerdere bricks in de level
Nu kun je meerdere bricks toevoegen aan de level.
Open scenes/main.tscn
Instance meerdere Brick.tscn scenes op verschillende locaties
Positioneer ze:
Tussen platforms waar de player onder door kan springen
Boven collectibles die de player wil bereiken
Als obstakels die versperren maar verwijderd kunnen worden
Test met F5 en vernietig alle bricks door er van onderaf tegenaan te springen!
Complete brick script
Laatst bijgewerkt