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