Unity - 动态生成迷宫(Roguelike游戏可用)


先来看看效果:
在这里插入图片描述
该迷宫只有,x,y二个维度的迷宫。
如果想要x,y,z三个维度迷宫的方式,请另外搜索。

该迷宫的生成算法参考了国外的一篇文章:Rooms and Mazes: A Procedural Dungeon Generator

不过我是算法实现上稍微和原作不太一样

然后我随便写了个测试脚本将各个参数暴露方便测试,如下图:
在这里插入图片描述

生成迷宫的算法思路

  • 按照迷宫的尺寸参数:宽高,生成网格(宽和高都必须为奇数
  • 随机生成并添加房间(房间之间没有交集,且房间的x,y坐标,和房间的w,h宽高也都必须是奇数
  • 生成隧道(隧道的曲折程度有百分比参数可以设置,每次挖掘隧道是都是两格两格的挖掘,这个就可以保证隧道拐角在奇数格也保证了隧道之间,或隧道与房间之间会有一个格子的距离,因为后面一步的可连接块中需要用到
  • 收集所有可连接墙块(房间之间的墙块,或是隧道与房间之间墙块
  • 确定选择可连接墙块中哪些块是作为连接的块(但至少要有一个连接格,否则该房间没有存在的意义
  • 遍历将这些连接格挖掘为地板块
  • 删除一些死胡同的隧道块(这个按需决定,有些玩法是需要保留死胡同的)

下面的图片都是按以上步骤处理的截图:

按照迷宫的尺寸参数:宽高,生成网格

在这里插入图片描述

随机生成并添加房间

在这里插入图片描述

生成隧道

在这里插入图片描述

收集所有可连接墙块

黄色块都是可作为连接格的块
在这里插入图片描述

确定选择可连接墙块中哪些块是作为连接的块

在这里插入图片描述

遍历将这些连接格挖掘为地板块

在这里插入图片描述

总览步骤图

在这里插入图片描述

生产了迷宫后,我们在根据迷宫数据生产可视化对象,每个对应类型的格子,都会使用对应一个Prefab生产。

最终效果,如下图:
在这里插入图片描述

在生成了迷宫网格对象基础上,再使用Unity官方GitHub上开源的NavmeshSurface来动态生成Nevmesh,如下图:
在这里插入图片描述

最后在加上之前制作的虚拟摇杆,参考这篇文章:Unity - UGUI快速制作虚拟摇杆 - 移动方向摇杆

把角色添加到迷宫做,用虚拟摇杆来控制移动。

如下图:
在这里插入图片描述

这样就生成了两个维度的(x,y)的迷宫,我们可以使用该功能制作Roguelike的地牢游戏,后面测试项目再添加一个怪物,宝箱,等,就差不多了。

References

Project backup

MazeGenerator_2018_3_0f2 备份的项目,打开GamePlay.scene场景即可

猜你喜欢

转载自blog.csdn.net/linjf520/article/details/104339299#comments_21647449