Tilemap-CustomRuleTile 的使用 Tile

 

Tile中添加属性字段是比较麻烦的-Tile的创建是由Unity3d创建的,类似于预制体,他不包含在Hierarchy栏目中,同时无法挂脚本,没办法做到赋值,也不能操作自定义属性

CustomRuleTile可以解决这个问题但是他使用起来比较麻烦,同时教程较少,官方文档中也没有合适的案例

 

首先确定版本

 

演示操作版本-2021.3.7f1c1

 

 

 

 

 

 

 

 

 

1
GameObject tile = tilemap.GetInstantiatedObject(postion);

  使用该项获取游戏对象

 

 

 

 

以下案例是错误的,请勿使用该方案  

 

创建一个CustomRuleTIle

 

 生成文件

 

生成的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[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

 在然后就可以拖动进调色板使用了 -同时他也支持创建规则 

 

 再然后编写代码进行试验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 @   AnAng  阅读(384)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示