- Home /
Procedural Random Walk Dungeon Generator?
Hi, I'm fairly new to Unity and I would like some guidance.
I'm trying to script a dungeon that is randomly generated using a random walk algorithm. I just want to script the very basics which includes a first-person view inside a 3d dungeon on only one z-plane for now.
How would be the best way to go about approaching this challenge? Would using small building block meshes and piecing them together work the best? Are there any other approaches that work well?
Thanks!
Answer by testure · Jun 25, 2011 at 02:35 AM
you'd need to assemble a variety of prefab 'rooms' and hallways, and make sure they all fit together in a pre-determined grid. You also have to define some relationships between the prefabs so that you know which prefabs are able to connect to each other, and on which sides (hallways to doors, etc). After that, it's as simple as instantiating the prefabs based on the rules you've defined.
yeah, and look for examples of how to build a city with roads for ideas too. The roads could be made as prefabs and each prefab has some connection points and could have some attributes like "movement speed" or "power consumption" if you need to calculate how far you can reach from a certain point.
Answer by Luke Briggs · Jun 25, 2011 at 05:43 PM
Hey! Probably the best (and easiest) type of random motion here would be where the NPC's keep on walking until they almost collide into something, at which point they turn away. To do this in Unity you'd attach a collider to the NPC which is larger than the actual NPC (to create a kind of range around it). You'd then set this collider so it doesn't actually use physics (so it doesn't prevent the NPC from moving) but instead is a trigger - something which lets some code know that a collision happened (take a look at onTriggerEnter :) ). To get the NPC to just move forward, you'd attach a script to it which uses the Update routine.
A really simple version of that would be this (Javascript):
var useX:boolean=true;
function Update(){
if(usex){
transform.position.x+=Time.deltaTime*speed;
}else{
transform.position.z+=Time.deltaTime*speed;
}
}
function OnTriggerEnter(other:Collider){
//something came in range - flip the direction
usex=!usex;
}
To make this a little more affective (It would cause the NPC to sort of zigzag across in the positive x/z direction), you could instead use a rotation to represent the direction the NPC is travelling in, then change that when the NPC get's close to something :)
In terms of dynamically generating the dungeons, it's best to generate 1 full Mesh object rather than lots of smaller ones. There is a function which can merge them together (see Mesh.Combine) which could help you with that :)
Hope that helps!
Luke
that's not what he's asking for- he's not trying to create random motion, he's trying to create a random dungeon using a walk algorithm (which is predictive, it doesn't actually move anything).
Your answer
Follow this Question
Related Questions
2D Tilemap room prefabs for dungeon generation. 0 Answers
Rooms being spawned in the wrong places? (Random Generation) 0 Answers
how to procedurally generate submarines with random events on the sub? 0 Answers
Procedural Generation... 2 Answers
Procedural generation of dungeons with rooms made in the new tile map system? 0 Answers