5. Herbruikbare Scenes
Leer werken met herbruikbare scenes en scene instantiatie
In deze tutorial leer je hoe je herbruikbare scenes maakt en instantieert. Door een blokkentoren te bouwen, ontdek je hoe je een scene kunt opslaan ("Save Branch as Scene") en deze meerdere keren kunt hergebruiken in je project. Dit is een fundamenteel Godot-patroon voor efficiënt werken.
Voeg een blok toe
De eerste stap bij het maken van een blokkentoren is het toevoegen van een eenvoudig blok aan de scène. Net zoals bij de knikker, begin je met een primitieve vorm die Godot aanbiedt.
Voor een blok gebruik je een BoxMesh (kubus), die je later kunt vormgeven tot de juiste afmetingen voor je toren.
Klik in het Hierarchy-venster met de rechtermuisknop op de root Node (Node3D) en selecteer Add Child Node en typ in het zoekveld MeshInstance3D.
Klik met de rechtermuisknop op de nieuwe MeshInstance3D in het Hierarchy-venster, selecteer Rename, en hernoem het naar "Block".
Ga in de inspector naar de Mesh eigenschap (onder MeshInstance3D) en klik het pijltje. Kies voor een BoxMesh.
Verander de plek en grootte van het blok
Het standaard blok is een perfecte kubus. Voor een toren heb je langwerpige blokken nodig die je op elkaar kunt stapelen, zoals bouwstenen.
Door de Scale van het blok aan te passen, kun je de vorm veranderen. Door de Position aan te passen, plaats je het blok op de juiste locatie in je knikkerbaan.
Zorg ervoor dat het Block GameObject is geselecteerd.
Stel in het Inspector-venster, binnen de Transform-eigenschap, de schaal van de Block Node in op bijvoorbeeld X = 2, Y = 0.5 en Z = 0.5 om een langwerpig blok te maken.
Pas de Position aan om het blok op een geschikte locatie onderaan je knikkerbaan te plaatsen, bijvoorbeeld met een Y Position van 0.5 zodat het blok op de grond rust.
Opmerking: Voor bouwblokken is het vaak beter om verschillende schaalwaarden te gebruiken voor X, Y en Z, zodat je langwerpige blokken krijgt die makkelijker te stapelen zijn.
Voeg een rigidbody3d parent toe
Net zoals bij de knikker, heeft het blok physics eigenschappen nodig om te kunnen vallen en botsen. Zonder een RigidBody3D zal het blok gewoon in de lucht blijven zweven en geen enkele interactie hebben met de rest van je wereld.
Selecteer en rechtsklik op het Block SceneObject in het SceneHierarchy-venster.
Klik op Reparent to New Node..., typ "Rigidbody" in de zoekbalk en selecteer de Rigidbody3D-node.
Je ziet nu een waarschuwing bij de RigidBody3D. Dit betekent dat er nog geen collider is toegevoegd.
Selecteer en rechtsklik op het RigidBody3D SceneObject in het SceneHierarchy-venster.
Klik op Add Child Node..., typ "collisionShape3D" in de zoekbalk en selecteer de CollisionShape3D-node.
Selecteer de CollisionShape3D en verander de Shape-eigenschap in de inspector naar een BoxShape3D.
In het Inspector-venster, klik op de BoxShape3D tekst (binnen de Shape-eigenschap) om de eigenschappen van de shape te openen.
Pas de Size van de BoxShape3D aan zodat deze overeenkomt met de afmetingen van je blok. Als je je blok geschaald hebt naar X = 2, Y = 0.5, Z = 0.5, stel dan de Size in op ongeveer X = 4, Y = 1 en Z = 1 (omdat de Size de volledige afmeting is).
Opmerking: In vorige tutorials heb je de collider aangepast door aan de handvatten in de Viewport te slepen. Nu leer je hoe je de Size-eigenschap rechtstreeks kunt aanpassen voor meer controle over de exacte afmetingen.
Maak van het blok een scene
Nu je blok compleet is met een RigidBody3D en een CollisionShape3D, is het tijd om er een herbruikbare scene van te maken. Op deze manier kun je later eenvoudig meerdere identieke blokken toevoegen aan je toren zonder telkens alles opnieuw te moeten instellen.
Een scene in Godot is een verzameling van nodes die je kunt opslaan en hergebruiken. Door je blok als scene op te slaan, kun je het later meerdere keren instantiëren.
Klik met de rechtermuisknop op de RigidBody3D node (de parent van je Block) in het Hierarchy-venster.
Selecteer Save Branch as Scene en sla de scene op in de Scenes-map met de naam "Block.tscn".
Je zult zien dat het pictogram naast de RigidBody3D verandert, wat aangeeft dat dit nu een scene is.
Sla je hoofdscene op met Ctrl+S (macOS: Cmd+S).
Tip: Door een scene te maken, kun je later gemakkelijk wijzigingen doorvoeren die automatisch worden toegepast op alle instanties van deze scene.
Maak een toren van blok scenes
Nu je een herbruikbare Block scene hebt gemaakt, kun je beginnen met het bouwen van een toren. Je voegt meerdere instanties van dezelfde Block scene toe en stapelt ze op elkaar.
Sleep het Block.tscn bestand vanuit het FileSystem-venster naar de Viewport om een nieuwe instantie toe te voegen.
Pas de Position van het nieuwe blok aan in de Inspector zodat het precies bovenop het eerste blok ligt. Als het eerste blok bijvoorbeeld een Y-positie van 0.5 heeft en een hoogte (Y-schaal) van 0.5, zou het tweede blok een Y-positie van ongeveer 1.0 moeten hebben.
Herhaal dit proces om meer blokken toe te voegen en bouw zo een toren van 5 tot 8 blokken hoog.
Experimenteer met het draaien van sommige blokken (pas de Rotation aan in de Transform, bijvoorbeeld 90 graden rond de Y-as) om een interessantere stapeling te creëren, zoals bij het spel Jenga.
Let op: Zorg ervoor dat de blokken niet in elkaar overlappen. Als blokken in elkaar overlappen bij het starten van de scene, kan dit zorgen voor explosief gedrag in de physics simulatie!
BELANGRIJK: Gebruik nooit de Scale-eigenschap op de Block scene instanties! Omdat de blokken physics eigenschappen bevatten (RigidBody3D en CollisionShape3D), werkt schalen niet correct en kan dit leiden tot onverwacht gedrag. Als je blokken van verschillende groottes wilt, maak dan aparte Block scenes aan met andere afmetingen.
Verplaats de toren naar het einde van de knikkerbaan
Nu je een toren hebt gebouwd, is het tijd om deze naar het einde van je knikkerbaan te verplaatsen en te testen of je knikker de toren kan omver duwen.
Selecteer het eerste Block (de onderste) in je toren in het Hierarchy-venster.
Verplaats dit blok naar een locatie aan het einde van je knikkerbaan door de Position aan te passen in de Inspector. Zorg dat de plek vlak is en dat de knikker er naartoe kan rollen.
Selecteer de andere blokken één voor één en verplaats ze zodat ze nog steeds netjes boven elkaar gestapeld blijven. Je moet de X- en Z-coördinaten aanpassen naar dezelfde waarde als het onderste blok.
Plaats je knikker bovenaan je knikkerbaan en test hoe de knikker tegen de toren aanrolt.
Verander het gewicht in de blok scene
Mogelijk zul je merken dat de blokken te zwaar zijn, of juist te licht. Door de Massa van de blokken aan te passen, kun je het gedrag van je toren veranderen.
Het mooie van het werken met scenes is dat je één keer een wijziging maakt en deze automatisch wordt toegepast op alle instanties van die scene.
Dubbelklik op het Block.tscn bestand in het FileSystem-venster om de Block scene te openen voor bewerking.
Selecteer de RigidBody3D node in de scene.
Zoek in het Inspector-venster naar de Mass eigenschap (onder RigidBody3D) en pas deze aan. Probeer bijvoorbeeld een waarde zoals 0.5 voor lichtere blokken of 2.0 voor zwaardere blokken.
Sla de Block scene op met Ctrl+S (macOS: Cmd+S).
Keer terug naar je hoofdscene door op het tab van je hoofdscene te klikken bovenaan het Viewport-venster.
Test je toren opnieuw door de scene af te spelen en te kijken hoe de knikker de blokken omver duwt.
Experimenteer: Probeer verschillende massa-waarden uit. Lichte blokken vallen gemakkelijker om, maar zware blokken zorgen voor een grotere uitdaging en meer dramatische crashes!
Geef een material aan de blok scene
De grijze blokken zien er nog wat saai uit. Door een Material toe te voegen, kun je de blokken een leuke kleur en afwerking geven, net zoals je bij de knikker hebt gedaan.
Zorg ervoor dat de Block.tscn scene geopend is voor bewerking.
Navigeer in het FileSystem-venster naar de map Materials.
Klik met de rechtermuisknop in de Materials-map en selecteer New Resource...
Zoek naar een StandardMaterial3D en druk op Create.
Hernoem het nieuwe materiaal naar "Block_Mat" (kort voor Block Material).
Sleep het nieuwe Block_Mat-materiaal rechtstreeks naar het Block SceneObject (de MeshInstance3D) in het Viewport-venster.
Dubbelklik op het Block_Mat-materiaal om de instellingen te openen in de Inspector.
Pas de Albedo Color aan naar een kleur naar keuze door op het kleurvak te klikken.
Experimenteer eventueel met de Metallic en Roughness eigenschappen voor een interessanter uiterlijk.
Sla de Block scene op met Ctrl+S (macOS: Cmd+S) en keer terug naar je hoofdscene.
Structureer de blokken in een node
Nu je meerdere Block instanties in je scene hebt, kan het Scene Hierarchy-venster rommelig beginnen te worden. Het is een goede gewoonte om gerelateerde objecten te organiseren in een parent node.
Door alle blokken onder één parent node te plaatsen, kun je:
Je scene overzichtelijker maken
Alle blokken samen verplaatsen of verbergen
Later gemakkelijker een complete toren dupliceren
Klik met de rechtermuisknop in het Hierarchy-venster op de root Node en selecteer Add Child Node.
Zoek naar Node3D en voeg deze toe.
Hernoem de nieuwe Node3D naar "BlockTower".
Sleep alle Block scene instanties naar de BlockTower node om ze als children te groeperen.
Klik op het oogje naast BlockTower om alle blokken tegelijk te verbergen en weer te tonen.
Tip: Door objecten logisch te groeperen, blijft je project overzichtelijk, vooral wanneer je scene complexer wordt met meer elementen. Als je de BlockTower node verplaatst, verplaatsen alle blokken mee!
Maak van de blokkentoren een scene
Nu je een complete blokkentoren hebt gebouwd en georganiseerd, kun je er een herbruikbare scene van maken. Dit is handig als je later meerdere torens wilt plaatsen op verschillende locaties in je knikkerbaan.
Klik met de rechtermuisknop op de BlockTower node in het Hierarchy-venster.
Selecteer Save Branch as Scene en sla de scene op in de Scenes-map met de naam "BlockTower.tscn".
Sla je hoofdscene op met Ctrl+S (macOS: Cmd+S).
Pas de massa van de knikker aan
Nu je een blokkentoren hebt die op de juiste plek staat aan het einde van je knikkerbaan, kun je ook de massa van de knikker aanpassen om de interactie te verbeteren.
Door de massa van de knikker aan te passen, kun je bepalen hoe krachtig de botsing is. Een zwaardere knikker zal de toren gemakkelijker omver duwen, terwijl een lichtere knikker meer snelheid nodig heeft.
Selecteer de RigidBody3D van je Marble (knikker) in het Hierarchy-venster.
Pas in het Inspector-venster de Mass eigenschap aan. Probeer bijvoorbeeld:
Mass = 0.5 voor een lichte knikker (vereist meer snelheid)
Mass = 1.0 voor een standaard knikker
Mass = 2.0 voor een zware knikker (gemakkelijker om blokken omver te duwen)
Test je knikkerbaan door de scene af te spelen en te kijken hoe de knikker de toren omver duwt.
Experimenteer met verschillende massa-waarden voor zowel de knikker als de blokken tot je een leuke balans hebt gevonden.
Balans vinden: De beste game-ervaring ontstaat wanneer je de juiste balans vindt tussen de massa van de knikker, de massa van de blokken, en de snelheid waarmee de knikker de toren raakt. Blijf experimenteren!
Laatst bijgewerkt