代码检查:预期类型应派生自 'Component' 或 'MonoBehaviour'
Unity.ExpectedComponent 检查确保在使用基于字符串的 Unity API(如 GameObject.AddComponent(string) 和 GameObject.GetComponent(string) )时的类型安全性。 它会标记那些指定类型存在但未继承所需基类(对于内置类型为 UnityEngine.Component ,对于用户自定义类型为 UnityEngine.MonoBehaviour )的情况。
运作方式
该检查使用 Unity 特定的引用提供程序,将字符串字面量解析为项目或库中的类型。 类型解析后,分析器将检查其是否满足被调用方法的继承要求。
验证规则:
对于内置类型 (来自 Unity 程序集):该类型必须派生自
UnityEngine.Component。对于用户自定义类型 (在当前项目中):该类型必须派生自
UnityEngine.MonoBehaviour。
这可以避免因组件不符合预期签名而导致 Unity 无法添加或查找指定组件时发生的运行时错误或静默失败。
示例
在此示例中, MyPlainClass 未继承自 MonoBehaviour ,因此无法作为组件添加到 GameObject。
public class MyPlainClass { }
public class MyScript : MonoBehaviour
{
void Start()
{
// Reported: MyPlainClass is not a MonoBehaviour
gameObject.AddComponent("MyPlainClass");
}
}
public class MyComponent : MonoBehaviour { }
public class MyScript : MonoBehaviour
{
void Start()
{
// After fix: MyComponent is a MonoBehaviour
gameObject.AddComponent("MyComponent");
}
}
2026年 5月 8日