UnityEngine.Object
类充当 Unity 在 Unity 编辑器中可以引用的所有对象的基类。您可以将继承自 UnityEngine.Object
的类拖放到 检视器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。 更多信息
查看 词汇表 中的字段,或使用对象字段旁边的对象选择器来选择它们。
对于您自己的自定义类,与其直接继承自 Object
,不如继承自更适合您的目标的类。例如
GameObject
,以控制 GameObject
的行为或提供与其相关的某些功能,则继承自 MonoBehaviour
。ScriptableObject
。这两者都继承自 UnityEngine.Object
,但提供额外功能以满足这些目的。
注意:UnityEngine.Object
与 .NET 的基类 System.Object
不同,后者未包含在默认脚本模板中,以避免名称冲突。如果您想创建不需要在检视器中分配的类,仍然可以继承 .NET 的 System.Object
。
Object
类提供用于实例化和销毁对象以及查找特定类型对象的引用的方法。有关对象类的 API 的更多信息,请参阅 对象的脚本参考页面。
UnityEngine.Object
是 Unity 中一种特殊类型的 C# 对象,因为它与一个非托管 (C++) 对应对象相关联。例如,当您使用 相机一个组件,它创建场景中特定视点的图像。输出要么绘制到屏幕上,要么作为纹理捕获。 更多信息
查看 词汇表 组件时,Unity 将对象的 state 存储在对象的 C++ 对应对象上,而不是 C# 对象本身。
Unity 目前不支持使用 C# WeakReference
类与 UnityEngine.Object
的实例一起使用。因此,您不应该使用 WeakReference
来引用已加载的资产。有关 WeakReference
类的更多信息,请参阅 Microsoft 的 WeakReference 文档。
当您使用 Object.Destroy 或 Object.DestroyImmediate 等方法销毁派生自 UnityEngine.Object
的对象时,Unity 会销毁 (卸载) C++ 对应对象。您无法使用显式调用来销毁 C# 对象,因为垃圾收集器管理内存。一旦不再有对托管对象的引用,垃圾收集器就会收集并销毁它。
如果您的应用程序尝试再次访问已销毁的 UnityEngine.Object
,Unity 将为大多数类型重新创建本机对应对象。此重新创建行为的两个例外是 MonoBehaviours 和 ScriptableObjects:Unity 永远不会在它们被销毁后重新加载它们。
MonoBehaviour
和 ScriptableObject
覆盖了相等 (==) 和不相等 (!=) 运算符。如果您将已销毁的 MonoBehaviour
或 ScriptableObject
与 null
进行比较,当托管对象仍然存在且尚未被垃圾收集时,运算符将返回 true。
由于您无法重载 ?? 和 ?. 运算符,因此它们与派生自 UnityEngine.Object
的对象不兼容。当您对已销毁的 MonoBehaviour
或 ScriptableObject
使用这些运算符时,它们不会返回与相等和不相等运算符相同的结果,而托管对象仍然存在。