Tilemap-CustomRuleTile 的使用 Tile
Tile中添加属性字段是比较麻烦的-Tile的创建是由Unity3d创建的,类似于预制体,他不包含在Hierarchy栏目中,同时无法挂脚本,没办法做到赋值,也不能操作自定义属性
CustomRuleTile可以解决这个问题但是他使用起来比较麻烦,同时教程较少,官方文档中也没有合适的案例
首先确定版本
演示操作版本-2021.3.7f1c1
GameObject tile = tilemap.GetInstantiatedObject(postion);
使用该项获取游戏对象
以下案例是错误的,请勿使用该方案
创建一个CustomRuleTIle
生成文件
生成的代码
[CreateAssetMenu]
public class NewCustomRuleTile : RuleTile<NewCustomRuleTile.Neighbor> {
public bool customField;
public class Neighbor : RuleTile.TilingRule.Neighbor {
public const int Null = 3;
public const int NotNull = 4;
}
public override bool RuleMatch(int neighbor, TileBase tile) {
switch (neighbor) {
case Neighbor.Null: return tile == null;
case Neighbor.NotNull: return tile != null;
}
return base.RuleMatch(neighbor, tile);
}
}在
代码中可以添加自定义属性
比如HP 同时我们把文件名改掉
在编译器中出现了
单击后生成一个Tile
在然后就可以拖动进调色板使用了 -同时他也支持创建规则
再然后编写代码进行试验
if (Input.GetKey(KeyCode.Backspace))
{
//将世界坐标转换为TileMap坐标
var postion = tilemap.WorldToCell(transform.position);
Debug.Log(postion);
//获取指定的Tile
TileBase tile = tilemap.GetTile(postion);
//这种方式也是可以的
//TileBase tile1 = tilemap.GetTile<T89TileScript>(postion);
Debug.Log(tile);
if (tile is T89TileScript t89Script)
{
t89Script.HP--;
Debug.Log(t89Script.HP);
}
}
剩余可以跳过
-探讨其绑定过程
Script脚本如何与Tile进行绑定的
记事本打开文件
可以看到一串ID 用来定义脚本
打开Script文件
可以看到两个ID是一样的
当然也可以通过普通Tile来绑定 预制件 GameObject来操作