ReSharper 2026.1 Help

代码检查:预期类型应派生自 '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日