什么是TIlemap ?

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

简单随机地形生成

下面我会分俩个个部分讲解随机地图的生成,先看看最终效果:

unity 根据后端列表生成卡牌 unity生成随机tilemap_List

五百瓦片

unity 根据后端列表生成卡牌 unity生成随机tilemap_扩展包_02

一千瓦片

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

生成思路

这篇文主要参考了 随机游走算法 的实现方法,以及官方的这篇文章 [如何使用Unity创建随机关卡] 。

这种算法的思路很简单,既然我们要生成一张没有死胡同的地图。那么我们就可以直接生成一个随机行走的机器人,给他规定要走过的**“不重复的格子”**的数量,等到他走完规定的数量以后,我们给他走过的地方贴上地面,然后遍历地面,如果周围是空的就给他填上墙壁,这样一个简单的随机地图就做好了。

unity 根据后端列表生成卡牌 unity生成随机tilemap_扩展包_03

一个无限大的图里有一个虚拟的小人,然后我们让他走五步,可能是这样

unity 根据后端列表生成卡牌 unity生成随机tilemap_代码实现_04

没有重复的五步

unity 根据后端列表生成卡牌 unity生成随机tilemap_List_05

重复了一步的五步

上图演示了俩种可能出现的情况,可以看到图2虽然同样是五步,但是他实际上只生成了四个格子,为了避免这种情况出现我们实现的时候实际上记录的是有效的格子数量,也就是只记录走过的不重复的格子的坐标。也就是 1、2、3、4 ,号格子。由于我们想要的是五个格子,所以我们需要让这个虚拟的机器人再继续行走直到我们得到了五个不重复的格子

代码实现

1. 创建空的Tilamap

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

unity 根据后端列表生成卡牌 unity生成随机tilemap_扩展包_06

首先创建我们需要的变量

1. 保存要生成的格子数

2. 保存生成的路的坐标

3. 保存生成的墙的坐标

unity 根据后端列表生成卡牌 unity生成随机tilemap_unity 根据后端列表生成卡牌_07

我们还需要几个函数

1. 生成路的函数 BuildRoad

2. 生成墙的函数 BuildWall

3. 生成一个行走方向的函数 RandomRoadPoint

unity 根据后端列表生成卡牌 unity生成随机tilemap_扩展包_08

这个函数首先生成一个随机坐标,用来生成起点。然后进入循环判断是否生成了足够数量的格子。

unity 根据后端列表生成卡牌 unity生成随机tilemap_List_09

这个函数用来生成墙壁,56 到 59 行用来判断 路的周围是否是空的,如果为空就把这个坐标加入到List中,思路如下 :

unity 根据后端列表生成卡牌 unity生成随机tilemap_扩展包_10

unity 根据后端列表生成卡牌 unity生成随机tilemap_扩展包_11

最后一个函数用来返回一个随机的方向,用来确定下一步要走哪里。

unity 根据后端列表生成卡牌 unity生成随机tilemap_扩展包_12

最后一个函数用来返回一个随机的方向,用来确定下一步要走哪里。