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来操作

posted @ 2022-10-04 06:21  AnAng  阅读(303)  评论(0编辑  收藏  举报