Notifications
Article
使用tilemap在unity中实现一个roguelike游戏(1)
Updated 5 months ago
2.2 K
14
使用tilemap在unity中实现一个roguelike游戏

什么是TIlemap ?

Tilemap 是在制作2D游戏中较为广泛使用的一种方式,很多成熟的游戏引擎都支持这一功能,Unity也在近几年支持了该功能官方还提供了一些例子以及一个扩展包在这[GitHub链接]

简单随机地形生成


下面我会分俩个个部分讲解随机地图的生成,先看看最终效果:
棕色部分是最终生成的可供玩家行走的路径,亮黄色是生成的墙壁。因为算法设置的缘故所有的路全部都是可以到达的通路,没有死胡同。这样生成的地图比较适合用于一些简单的肉鸽like游戏 。

生成思路

​ 这篇文主要参考了随机游走算法的实现方法,以及官方的这篇文章[如何使用Unity创建随机关卡]。
​ 这种算法的思路很简单,既然我们要生成一张没有死胡同的地图。那么我们就可以直接生成一个随机行走的机器人,给他规定要走过的**“不重复的格子”**的数量,等到他走完规定的数量以后,我们给他走过的地方贴上地面,然后遍历地面,如果周围是空的就给他填上墙壁,这样一个简单的随机地图就做好了。
​ 上图演示了俩种可能出现的情况,可以看到图2虽然同样是五步,但是他实际上只生成了四个格子,为了避免这种情况出现我们实现的时候实际上记录的是有效的格子数量,也就是只记录走过的不重复的格子的坐标。也就是 1、2、3、4 ,号格子。由于我们想要的是五个格子,所以我们需要让这个虚拟的机器人再继续行走直到我们得到了五个不重复的格子

代码实现

1. 创建空的Tilamap
2. 创建一个空物体,用来挂载我们的地图生成脚本。

首先创建我们需要的变量
1. 保存要生成的格子数
2. 保存生成的路的坐标
3. 保存生成的墙的坐标
我们还需要几个函数
1. 生成路的函数 BuildRoad
2. 生成墙的函数 BuildWall
3. 生成一个行走方向的函数 RandomRoadPoint
这个函数首先生成一个随机坐标,用来生成起点。然后进入循环判断是否生成了足够数量的格子。
这个函数用来生成墙壁,56 到 59 行用来判断 路的周围是否是空的,如果为空就把这个坐标加入到List中,思路如下 :

最后一个函数用来返回一个随机的方向,用来确定下一步要走哪里。
最后一个函数用来返回一个随机的方向,用来确定下一步要走哪里。
总结
这次的案例十分简单,只要理解了这个算法的思路很快就能上手,另外需要注意的一点就是 在我这个版本的简易实现中需要大量遍历数据,所以我使用了字典来作为保存路径坐标,这样可以极大的提升生成效率,我的文章仅作为抛砖引玉之用,如果大家有更好的实现方案欢迎评论来和我讨论,再见~
超级汽水
超级热爱 - Student
14
Comments
Di
4 months ago
up=item+Vector3Int.up,其中Vector3Int.up是谁的up?是item的,还是变量up的?萌新不是很懂,作者大大;
0
a
alexandrezhang
5 months ago
tilemap. settile方法可以画出地图。只是现在这个地图不能保存,我下一次运行就生成另外一个新地图了。如果我随机生成了一个地图,刚好就是我想要的,怎么把它保存下来呢?或者我想在随机地图的基础上,再进行一些手动修改,应该怎么做呢?
0
SS
5 months ago
好活,大赞
0
好贴,插眼👍
0
Easyy
8 months ago
收藏了
0