要解决什么问题?
RuleTile是非常实用的一个Unity工具,然而网上能找到的许多教程都是在编辑器中直接使用palette绘制地图的。然而如果游戏要有roguelike要素,需要随机生成地图时,则需要从脚本控制地图的生成,当然我们希望的是能够继续使用RuleTile,代替我们自己编写瓦块填充规则。
虽然这个问题事实上并不难,但网上找不到别的教程,这对我这种小白而言还是挺痛苦的。捣鼓了半天摸到了解决办法,在这里分享出来,希望有需要的人可以少走点弯路。
解决问题的关键
首先可以从官方文档中找到这么一个函数,是可以设置Tilemap中一个Cell的Tile的,它的第二个参数是Tile的样本,类型为TileBase
然后经过我的查找发现,RuleTile类事实上是继承于TileBase类的
因此事实上RuleTile可以作为SetTile函数的参数传递,这就是从脚本中使用RuleTile的关键。
详细解决办法
1、与常规做法一样,从Assets中创建新的RuleTile,并决定好所需的规则
创建RuleTile:
预设规则:
2、在创建随机地图的脚本中加入RuleTile变量(我用了两个RuleTile所以加了两个)
为了绘制,我们还需要一个Tilemap变量
(其中[SerializeField]是为了在Inspector中序列化Private变量)
3、挂载该脚本,从Inspector中拖入所需的RuleTile和Tilemap
4、按照自己生成地图的逻辑,调用SetTile函数,其中第二个参数直接使用我们所需的RuleTile
5、整个地图构建都使用SetTile完成,出来的地图就已经是RuleTile处理过的地图了,不需要再进行任何操作。
总结
要在脚本中使用RuleTile,只需要调用SetTile函数即可。
(其中RuleTile作为TileBase参数传递给SetTile函数)
调用SetTile函数与手动绘制RuleTile的效果是一致的,都是规则化处理的瓦片。