代码检查:使用 'CompareTag' 而不是显式字符串比较
tag 属性返回一个字符串值,可用于标识一个或多个游戏对象(详细信息请参见 标记文档)。 但是,每次访问此属性时都会发生一次内存分配,因为字符串会从 Unity 的本地对象复制到托管的 C# 字符串中。
此检查将高亮显示与 tag 的显式字符串比较,例如:
if (gameObject.tag == "Tank")
还提供快速修复,将此比较转换为调用 CompareTag(string) ,这是 Unity 引擎的本地方法调用,因此可以避免内存分配:
if (gameObject.CompareTag("Tank"))
但需要注意, CompareTag 的行为略有不同——在运行时会检查标记是否存在,如果不存在,会在 Unity 控制台中报告错误。 这并不是 Unity 政策的变更——标记应在使用前先存在——但简单的字符串相等无法进行此类检查。
更多详情请参见 Unity 的 Unity 游戏中垃圾回收优化中关于 CompareTag 的相关部分,以及 Unity 论坛上的此解答。
2026年 5月 8日