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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章