Unity Tutorial 3D Maze Generator – Part 2

In the first part of this tutorial, we programmed an algorithm that creates a three-dimensional randomized maze of single cells. Now we want to show this maze in our level. This tutorial is primarily about the simplest way of presenting the maze without any gameplay mechanics.

A randomly created maze of height 1 (in this case two-dimensional) might look like this:

Bild: Darstellung eines Labyrinths in Unity

Wir ergänzen dazu unser Unity Projekt, dass wir bereits im ersten Teil dieses Tutorials erstellt haben um ein Script, ein Prefab und ein Material.

We add to our Unity project, that we created in the first part of this tutorial, a script, a prefab and a material.

Let’s start with the prefab. Create a new cube by clicking in the menu GameObject –> 3D Object –> Cube.

The cube shoud now be in your hierarchy. Click on it and reset the transform component. Set the scale to X:2, Y:2 und Z:0.2.

Bild: Transform Component in Unity

Then you create a new material via the menu Assets -> Create -> Material and edit it as you wish. So that the material is better visible, it is advisable to choose a texture. Pull the material on the cube and rename the cube to “WallPrefab”.

Pull the object WallPrefab from the Hierarchy to the Project-Browser. now you have created a new prefab. Delete the cube out of the Hierarchy now.

Now all you have to do is to create the script that displays the maze. Create a new script and call it MazeController. Also create a new “Empty GameObject” in the hierarchy via Create -> Create Empty and also name the GameObject MazeController. When the GameObject is selected, select your script in the Inspector under AddComponent / Scripts and add it to the GameObject.

Da wir ja im ersten Teil dieses Tutorials bereits die meiste Vorarbeit gemacht haben, benötigen wir jetzt lediglich noch die Informationen darüber, wie groß unser Labyrinth werden soll. Dazu erstellen wir drei public Variablen in unserem neuen Script. Wir verwenden public Variablen, damit wir diese im Inspector manuell anpassen können. Außerdem benötigen wir public GameObject, in das wir später ohne erstelltes Prefab ablegen.

Since we already did most of the preliminary work in the first part of this tutorial, all we need now is the information about how big our labyrinth should be. For this we create three public variables in our new script. We use public variables so we can manually adjust them in the Inspector. We also need public GameObject, which we drop in the prefab later.

Let’s first generate the maze:

Damit ist das Labyrinth erstellt. Jetzt müssen wir nur noch Zelle für Zelle durchgehen und von jeder Zelle die Wand einfügen, die mit true markiert ist. Die Zellen gehen wir mit einer dreifach verzweigten For-Schleife durch. Wir überprüfen jede einzelne Wand jeder Zelle und wenn Sie existiert erstellen wir eine Kopie unseres Prefabs und drehen die Kopie so hin, wie sie sein muss und zu unserer vorher festgelegten Nummerierung passt.

Now all we have to do is to go through the cells and insert from each cell the walls marked with true. The cells we go through with a triple-branched for-loop. We check every single wall of each cell and if it exists we make a copy of our prefab and rotate the copy as it fit to our predetermined numbering.

Bild: Nummerierung der Wände einer Zelle

The rotated walls only have to be moved to the corresponding position in the coordinate system now. For the sake of simplicity, the coordinate system of the labyrinth is simply multiplied by a factor of two.

Complete code of the class MazeController:

 

Download

You can download the complete project for unity here:

Download Tutorial Files

Leave a Reply

Your email address will not be published. Required fields are marked *