您当前的位置: 首页 >  游戏

Jave.Lin

暂无认证

  • 2浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

Jave.Lin 发布时间:2020-02-16 12:41:03 ,浏览量:2

文章目录
  • 生成迷宫的算法思路
    • 按照迷宫的尺寸参数:宽高,生成网格
    • 随机生成并添加房间
    • 生成隧道
    • 收集所有可连接墙块
    • 确定选择可连接墙块中哪些块是作为连接的块
    • 遍历将这些连接格挖掘为地板块
    • 总览步骤图
  • References
  • Project backup
先来看看效果: 在这里插入图片描述 该迷宫只有,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
  • Rooms and Mazes: A Procedural Dungeon Generator
Project backup

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

关注
打赏
1664331872
查看更多评论
立即登录/注册

微信扫码登录

0.0427s