Ingewikkeldheid: Unity C#
Benodigde Modules: 3D Basis Unity, 3D Speler Bewegen
In deze module ga je een manier leren om oneindige werelden te maken, opgebouwd uit verschillende ‘blokken’. Je gaat ook leren hoe je een eindblok kan maken voor als je toch een einde aan het spel wil maken.
In deze module ga je beginnen met het maken van drie scripts:
- Een WereldBlokDatabase script om de verschillende blokken die gekozen kunnen worden in te stellen
- Een WereldBlok script dat op elk blok komt en dingen bijhoudt die bij dat blok horen.
- Een WereldBlokSpawner script dat ervoor zorgt dat nieuwe blokken op de juiste plek gespawnd worden.
Maak deze drie scripts nu aan. Hieronder staan de volledige scripts, met commentaar bij elke regel om uit te leggen wat het doet.
Het WereldBlokDatabase script:Het WereldBlok script:Het WereldBlokSpawner script:Als je deze scripts gemaakt hebt, ga dan naar Unity.
Maak nu een leeg Game Object aan en voeg het WereldBlok script hier aan toe. Maak nu een Cube object aan als kind van dit object en maak hiervan de grond van het blok door de X en de Z Scale in het Transform component op een groter getal te zetten. Dit wordt ook de Grootte die je in moet stellen bij het WereldBlok component. Zorg ook dat bij de Position van het Transform component van de grond alles op 0 staat. De Grootte die je kiest bepaald hoe groot elk blok is. Zorg er voor nu voor dat elk blok dezelfde basisgrootte heeft, hoewel de de vorm natuurlijk wel aan kan passen, door bijvoorbeeld een cirkel of een kruis te maken in plaats van een vierkant.
Voeg nu weer als kind object van het wereldblok een leeg (Empty) Game Object toe. Voeg hieraan het WereldBlokSpawner script en een Box Collider script. De eerste van deze Spawners die je maakt zal als Spawn Richting op Noord staan. Noord is in de richting van de blauwe Z as in Unity. Verplaats dit object naardie rand van het blok en stel dan de Size van het Box Collider component in zodat het die rand omvat. Zet hier ook een vinkje achter Is Trigger.
Doe dit nu ook voor de andere richtingen en zet dan steeds de Spawn Richting op de goedde richting. Zet daarna deze Spawners in de Blok Spawners lijst van het Wereld Blok component. Zorg er hierbij voor dat je de Noord–Oost–Zuid–West volgorde aanhoudt.Sla dit wereldblok op als een Prefab dat je een naam geeft als Wereld Blok Leeg. Dit wordt de basis voor al je volgende blokken, dus zorg er voor dat je nooit wijzigingen aan deze Prefab opslaat. Als je een nieuw blok wil maken zet je dit lege blok in de Scene en dan maak je hier meteen weer een nieuw Prefab van door het vanuit de Hierarchy in de Assets te slepen en het een naam met een nummer te geven (bijv. Wereld Blok 1). Daarna kan je andere objecten toevoegen aan het blok. Maak nu een paar van deze blokken. Vergeet niet de blokken die klaar zijn uit de Scene te verwijderen.
Maak nu in je Scene weer een Empty Game Object en voeg hier het WereldBlokDatabase script aan toe. Sleep de blokken die je hebt gemaakt vanuit de Assets in de lijst Standaard Blokken. Om te testen of het Eind Blok werkt kan je voor nu het lege blok daar instellen.Als je alles goed ingesteld hebt kan je een van je blokken als startblok weer in de Scene zetten. Je kan natuurlijk ook een speciaal startblok maken met een Spawner die de reeks blokken begint. Zorg er in ieder geval voor dat je Speler niet in een Spawner begint. Als je alles goed hebt ingesteld zou je oneindige wereld nu moeten werken!
Zoals je het nu hebt gemaakt, verschijnen de blokken plotseling uit het niets. Het is mooier om ze van onder of van boven te laten komen. Om dit te doen moet je het WereldBlok script op de volgende manier aanpassen:
Dit script gebruikt een Coroutine om over een bepaalde tijd een specifieke functie uit te voeren, in dit geval het bewegen van het blok. Hierin wordt ook Vector3.Lerp gebruikt om het blok heel geleidelijk te laten bewegen tussen de startpositie en de eindpositie, aan de hand van een teller float en de Lift Duur die bij de variabelen is ingesteld.
Zorg dat bij je start blok de Lift Hoogte op 0 staat! Je kan de Lift Hoogte ook op een negatief getal zetten om het blok van boven te laten komen. Voeg de regel
LiftHoogte *= Random.Range(0, 2) == 1 ? 1 : -1;
Toe aan je Start methode om de blokken willekeurig van boven of beneden te laten komen.