Nerd For Tech
Published in

Nerd For Tech

Maze generation: making the grid

3D Hedge maze being generated from a grid of cubes and walls.

After a brief break I am back and decided to warm up with a bit of Maze Generation.

The maze in the GIF is being generated using a Recursive Backtracking Algorithm, also know as Flood Fill or Depth First Search. And will be the method we explore the coding of.

Objective: Generate a Random Maze from scratch.

Condition: A player or agent must be able to reach any point of the maze from any other point.

A plane, cube and wall

For this setup, I will be using a Plane for my surface, A cube for the ‘cells’ and another cube for the walls.

Inspector setup for Cell Cube

Here is the settings used for the Cell cube. Make sure that the position is set to Zero before making it your prefab.

Inspector setup for Wall Cube

And the settings for the Wall cube.

First thing we need to do is create the grid that we will make into a maze.

C# code for generating Cells and Walls

In this part of the code, we have a couple of variables that I need to define. _gridXSize and _gridZSize are fairly self explanatory, The Maze will be built on the X/Z plane, so I serialized these so that the designer can choose the size of the grid. _mazeParent is a empty GameObject that will hold the Maze and allow us to keep the Scene clean. It can be created on the fly or added by the designer.

If FillGridWithCells(), we use a nested For loop to create a clone of our Cell prefab in a position for each X,Z of the grid.

For the Walls, we have to do something a little different. We could create a wall at each direction around each cell in the grid, but then we will end up with doubled up walls. To avoid that, we will create walls along the Eastern(+X) side of the maze. Then again along the Northern(+Z) side of the maze. With the Southern and Western walls, we will use another nested For loop to create the pair for each Cell, this will fill in the Southern and Western Boundaries of the Maze as well as fill in the grid without over lap.

Floor placement code

For the Surface placement, we need to do a bit of math to get sized and positioned correctly. First thing to note is that a Plane with a Scale of 1 will cover a 10 by 10 grid of Cubes at Scale 1. So when we figure out the scale (line 4 of the above code), we have to divide the result by 10. The +1 the I am using here is to create a bit of extra around the maze and is not strictly needed. But it does come in handy when you are dealing with mazes that are not even on both sides.

As for centering the plan under the the grid, You want to take half of the gird size for each axis to find the center point.

In the Next article we will look at what we need to do this grid to make a maze.

--

--

--

NFT is an Educational Media House. Our mission is to bring the invaluable knowledge and experiences of experts from all over the world to the novice. To know more about us, visit https://www.nerdfortech.org/.

Recommended from Medium

Introduction to Web Scraping With Laravel

How To Add SingularityNET (AGIX) Tokens To Your Wallet

In defence of the technical interview

Mine Sweeper Made Easy

Merapar DevOps — AWS SSO CLI v2 and cross account access

ODOO QWEB TEMPLATES

Qweb

Hack For Social Justice — WWCode SV Annual Hackathon

Going Remote as a Software Engineering Student

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Thomas Kesler

Thomas Kesler

A Unity Developer with a fondness for Fantasy games and the challenge of pushing boundaries.

More from Medium

Aiming Features in Cinemachine

Creating a HUD

Spicing up our enemy movement

Creating a Simple Cooldown System In Unity