4. Platform Mechanics
Implementeer static, moving en falling platforms voor je platformer
Overzicht
In dit hoofdstuk bouw je verschillende soorten platforms voor je platformer. Je leert:
Static platforms maken met StaticBody3D
Moving platforms met AnimationPlayer
Falling platforms die reageren op de player
Static platform scene
Begin met een eenvoudige static platform scene die later als basis dient.
Ga naar Scene > New Scene
Selecteer Other Node en zoek naar StaticBody3D
Klik Create
Hernoem de root node naar Platform
Sla de scene op als res://objects/Platform.tscn
Waarom StaticBody3D? Dit is een physics body dat niet beweegt door gravity, maar wel collision heeft met andere bodies - perfect voor platforms.
Platform model toevoegen
Open het FileSystem panel
Navigeer naar models/platform.glb
Sleep platform.glb naar de Platform 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 Platform root node
Rechts-klik > Add Child Node > CollisionShape3D
In de Inspector van CollisionShape3D:
Shape > New BoxShape3D
Pas de BoxShape3D aan zodat deze het platform model bedekt
Sla de scene op
Scene hierarchy (updated):
Test de static platform

Open scenes/main.tscn
Sleep objects/Platform.tscn in de scene
Positioneer het platform in de level
Test met F5:
De player kan op het platform staan
Het platform beweegt niet
Moving platform
Maak nu een platform dat automatisch heen en weer beweegt. Gebruik AnimationPlayer om de beweging te animeren.
Maak een nieuwe scene (Scene > New Scene)
Selecteer 3D Scene
Hernoem de root node naar MovingPlatform
Rechts-klik op de root node > Add Child... > AnimatableBody3D
Klik Create
Sla de scene op als res://objects/MovingPlatform.tscn
Waarom AnimatableBody3D? Dit is een StaticBody3D die wel kan bewegen via animaties en scripts, terwijl physics bodies die erop staan correct meebewegen.
Model en collision toevoegen
Sleep models/platform.glb naar de AnimatableBody3D node
Voeg een CollisionShape3D child toe aan het AnimatableBody3D
Geef de CollisionShape3D een BoxShape3D
Pas de BoxShape3D aan zodat deze het platform model bedekt
Scene hierarchy:
AnimationPlayer Toevoegen
Selecteer de AnimatableBody3D node
Rechts-klik > Add Child Node > AnimationPlayer
Sla de scene op
Scene hierarchy (updated):
Move animatie maken

Maak nu een animatie die het platform heen en weer beweegt.
Selecteer de AnimationPlayer node
In het Animation panel onderaan, klik Animation > New Animation

Noem de animatie "move" en klik OK
Stel de animation length in op 2.0 seconden (rechts bovenaan in Animation panel)

Selecteer de MovingPlatform root node
Ga in de Inspector naar de Node3D > Transform property, en klik op het sleutel icoon
Klik op Create

Versleep de Animation Timer naar het einde (2 seconden)

In de Inspector, verplaats de X-positie naar 5, en klik terug op het sleutel icoon

In de Animation Editor, zorg er nu voor dat
de animatie heen en weer gaat, en
dat het platform vertraagt en versnelt
Dat de animatie automatisch start

Falling platform
Maak nu een platform dat naar beneden valt wanneer de player erop springt.
Maak een nieuwe scene (Scene > New Scene)
Selecteer Other Node > RigidBody3D
Hernoem de root node naar FallingPlatform
Klik Create
Sla de scene op als res://objects/FallingPlatform.tscn
Model en collision toevoegen
Sleep models/platform-falling.glb naar de FallingPlatform root node
Voeg een CollisionShape3D child toe aan de FallingPlatform root node
Geef de CollisionShape3D een BoxShape3D
Pas de BoxShape3D aan zodat deze het platform model bedekt
Scene hierarchy:
Timer toevoegen
Gebruik een Timer-node om de vertraging te implementeren voordat het platform valt.
Selecteer de FallingPlatform root node
Rechts-klik > Add Child Node > Timer
Selecteer de Timer node
In de Inspector, stel Wait Time in op 0.5 seconden
Vink One Shot aan (timer loopt maar één keer af)
Sla de scene op
Scene hierarchy (updated):
RigidBody3D Settings

Je wilt dat het platform pas valt wanneer de player erop staat, niet meteen bij de start.
Selecteer de RigidBody3D root node
In de Inspector, vind de Deactivation properties:
Freeze Mode: Kinematic
Freeze: Vink Freeze aan
Sla de scene op
Dit zorgt ervoor dat het platform initieel "bevroren" is en niet valt door gravity.
Activator area toevoegen

Gebruik een Area3D-node om de te detecteren wanneer de speler op het platform komt, zodat je daarna het platform naar beneden laat vallen.
Selecteer de FallingPlatform root node
Rechts-klik > Add Child Node > Area3D
Hernoem de Area3D naar FallingActivator
Selecteer de FallingActivator node
Rechts-klik > Add Child Node > CollisionShape3D
Geef de CollisionShape3D een BoxShape3D
Pas de BoxShape3D aan zodat deze een beetje boven het platform uitsteekt
Selecteer de FallingActivator node
In de Inspector, open de CollisionObject3D > Collision property
Zet Mask op 2 (en vink 1 uit)

Sla de scene op
Open objects/Player.tscn
Selecteer de Player root node
In de Inspector, open de CollisionObject3D > Collision property
Zet Layer op 1 Γ¨n 2

Scene hierarchy (updated):
Falling platform script
Maak nu een script dat de timer start wanneer de player op het platform komt.
Selecteer de FallingPlatform (RigidBody3D) root node
Klik op Attach Script
Language: C#
Template: Empty
Class Name: FallingPlatform
Path: res://scripts/FallingPlatform.cs
Klik Create
Voeg exported fields toe voor de Timer en Area3D:
Voeg de
_Ready()method toe:
verbind je het
Timeoutsignal van de timer. Wanneer de timer afloopt, bevrijd je het platform doorFreezeopfalsete zetten:
Verbind je het
BodyEnteredsignal van de Area3D. Wanneer iets het platform raakt, start je de timer:
Waarom twee signals?
BodyEntereddetecteert wanneer de player het platform raaktTimeoutwacht 0.5 seconden voordat het platform valtDit geeft de player tijd om te realiseren dat het platform gaat vallen
Nodes toewijzen in de editor
Nu moet je de Timer en FallingActivator nodes toewijzen aan het script.
Open objects/FallingPlatform.tscn
Selecteer de FallingPlatform root node
In de Inspector, zie je nu twee properties:
Fall Timer: Sleep de Timer node hierheen
Fall Activator: Sleep de FallingActivator (Area3D) node hierheen
Sla de scene op
Test de platforms
Open scenes/main.tscn
Voeg meerdere platforms toe aan je level:
Static platforms: Voor vaste platforms
Moving platforms: Voor platforms die bewegen
Falling platforms: Voor platforms die vallen
Test met F5:
Static platforms blijven op hun plaats
Moving platforms bewegen heen en weer (player beweegt mee!)
Falling platforms vallen ~0.5s nadat je erop springt
Tip: Plaats falling platforms boven een vangnet of respawn trigger!
Complete scripts
Laatst bijgewerkt