文档

Unity Engine

Unity Engine

对象

UnityEngine.Object is the base class for all objects the Editor can reference from fields in the Inspector window.
阅读时间4 分钟最后更新于 1 个月前

UnityEngine.Object
类用作 Unity 可以在 Unity 编辑器中引用的所有对象的基类。可将继承自
UnityEngine.Object
的类拖放到 Inspector 中的字段中,或使用“对象 (Object)”字段旁边的 Object Picker 进行选取。

Inspector 窗口中的“对象 (Object)”字段示例。Object Picker 是字段右侧的圆形图标。

一般而言,继承自专为目标设计的类会更好,而不是直接从自定义类的
Object
继承。例如:
  • 如果您想编写可以添加到
    MonoBehaviour
    的自定义组件,应继承自
    GameObject
    ,以控制
    GameObject
    的功能或提供与其相关的某些功能。
  • 如果您想创建可以存储序列化数据的自定义资源,应该继承自
    ScriptableObject
    。
二者都继承自
UnityEngine.Object
,但提供了额外的功能来满足这些目的。
注意:
UnityEngine.Object
与 .NET 的基本
System.Object
不同,后者不包含在默认脚本模板中,因此名称不会冲突。如果您想创建不需要在 Inspector 中分配的类,仍然可以从 .NET 的
System.Object
继承。
Object
类提供了用于实例化和销毁对象以及查找对特定类型对象的引用的方法。有关 Object 类的 API 的更多信息,请参阅对象的脚本参考页。

UnityEngine.Object 的特殊行为

UnityEngine.Object
是 Unity 中的一种特殊类型的 C# 对象,因为它链接到非托管 (C++) 对应对象。例如,使用摄像机 (Camera) 组件时,Unity 会将对象的状态存储在对象的 C++ 对应项上,而不是存储在 C# 对象本身上。
Unity 目前不支持将 C#
WeakReference
类与
UnityEngine.Object
实例结合使用。因此,不应使用
WeakReference
来引用加载的资源。有关
WeakReference
类的更多信息,请参阅 Microsoft 的 WeakReference 文档。

Unity C# 和 Unity C++ 共享 UnityEngine 对象

使用 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
进行使用时,这些运算符不会返回与相等和不相等运算符相同的结果。

其他资源