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