比较标签

通过标记比较两个 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 
}