这和 MonoBehaviour 的 name
属性是有关系的,因为在 MonoBehaviour 类中有一个名为 name
的属性,而 MonoBehaviour 类是 Unity 引擎中用于编写脚本的基类之一。所以如果你在 Unity 中使用 C# 编写脚本,可以直接使用 name
属性,而不需要显式地实现 ITest
接口中的 name
属性。
如果你想重新定义name属性,可以写一个MonoBehaviour的基类,让其它脚本去继承他。
using UnityEngine;
public abstract class BehaviourNonAlloc : MonoBehaviour
{
// .name是经常访问的,缓存它以避免GC!
// 避免反复调用任何字符串访问器或数组访问器,造成垃圾资源分配(特别是在update中),这里是只获取一次并缓存它。
// unity许多API有NonAlloc版本,这就是牺牲部分精确性,换来性能提升,减少资源分配
// (the more players/monsters, the more .name calls. this matters.)
string cachedName;
public new string name
{
get
{
if (string.IsNullOrWhiteSpace(cachedName))
cachedName = base.name;
return cachedName;
}
set
{
cachedName = base.name = value;
}
}
}