Unity记录:按照Rule Tile规则动态生成地图(从脚本中使用RuleTile)

要解决什么问题?

    RuleTile是非常实用的一个Unity工具,然而网上能找到的许多教程都是在编辑器中直接使用palette绘制地图的。然而如果游戏要有roguelike要素,需要随机生成地图时,则需要从脚本控制地图的生成,当然我们希望的是能够继续使用RuleTile,代替我们自己编写瓦块填充规则。
     虽然这个问题事实上并不难,但网上找不到别的教程,这对我这种小白而言还是挺痛苦的。捣鼓了半天摸到了解决办法,在这里分享出来,希望有需要的人可以少走点弯路。

解决问题的关键

首先可以从官方文档中找到这么一个函数,是可以设置Tilemap中一个Cell的Tile的,它的第二个参数是Tile的样本,类型为TileBase
Unity记录:按照Rule Tile规则动态生成地图(从脚本中使用RuleTile)_第1张图片
然后经过我的查找发现,RuleTile类事实上是继承于TileBase类的TileBase
因此事实上RuleTile可以作为SetTile函数的参数传递,这就是从脚本中使用RuleTile的关键。

详细解决办法

1、与常规做法一样,从Assets中创建新的RuleTile,并决定好所需的规则
创建RuleTile:
Unity记录:按照Rule Tile规则动态生成地图(从脚本中使用RuleTile)_第2张图片
预设规则:
Unity记录:按照Rule Tile规则动态生成地图(从脚本中使用RuleTile)_第3张图片
2、在创建随机地图的脚本中加入RuleTile变量(我用了两个RuleTile所以加了两个)
为了绘制,我们还需要一个Tilemap变量
(其中[SerializeField]是为了在Inspector中序列化Private变量)
Unity记录:按照Rule Tile规则动态生成地图(从脚本中使用RuleTile)_第4张图片
3、挂载该脚本,从Inspector中拖入所需的RuleTile和Tilemap
Unity记录:按照Rule Tile规则动态生成地图(从脚本中使用RuleTile)_第5张图片

4、按照自己生成地图的逻辑,调用SetTile函数,其中第二个参数直接使用我们所需的RuleTile
Unity记录:按照Rule Tile规则动态生成地图(从脚本中使用RuleTile)_第6张图片
5、整个地图构建都使用SetTile完成,出来的地图就已经是RuleTile处理过的地图了,不需要再进行任何操作。
Unity记录:按照Rule Tile规则动态生成地图(从脚本中使用RuleTile)_第7张图片

总结

要在脚本中使用RuleTile,只需要调用SetTile函数即可。
(其中RuleTile作为TileBase参数传递给SetTile函数)

调用SetTile函数与手动绘制RuleTile的效果是一致的,都是规则化处理的瓦片。

你可能感兴趣的:(Unity记录,unity,游戏,游戏开发)