比較標籤

通過標記比較兩個 GameObject 時,應該注意以下內容會導致垃圾收集器開銷,因為每次都會建立一個字串:

if (go.Tag == "myTag")
{ 
    //Stuff 
}

Update() 和其他常規 Unity 的回撥(或迴圈)中執行這些比較時,你應該使用此無堆分配方法:

if (go.CompareTag("myTag")
{ 
    //Stuff 
}

此外,將標記儲存在靜態類中更容易。

public static class Tags
{
    public const string Player = "Player";
    public const string MyCustomTag = "MyCustomTag";
}

然後你可以安全地比較

if (go.CompareTag(Tags.MyCustomTag)
{ 
    //Stuff 
}

這樣,你的標記字串就會在編譯時生成,並且你可以限制拼寫錯誤的含義。

就像將標記儲存到靜態類中一樣,也可以將它儲存到列舉中:

public enum Tags
{
    Player, Ennemies, MyCustomTag;
}

然後你可以使用 enum toString() 方法比較它:

if (go.CompareTag(Tags.MyCustomTag.toString())
{ 
    //Stuff 
}