Unity 在 UnityEngine 命名空间中有一个名为 Object 的类,作为 Unity 可以在编辑器中引用的所有对象的基类。继承自 UnityEngine.Object 的类具有特殊功能,这意味着它们可以被拖放到 Inspector 中的字段中,或者使用 Object 字段旁边的对象选择器来选取。
此页面概述了 Object 类及其使用该类编写脚本时的常见用法。有关 Object 类的每个成员的详尽参考,请参阅 Object 脚本参考。
通过脚本创建自己的对象时,您通常不会直接从 Object 继承。而应该从一个更契合您的目标的类继承。
例如,如果您想编写可以添加到游戏对象的自定义组件,应继承自 MonoBehaviour,以控制游戏对象的功能或提供与其相关的某些功能。
或者,如果要创建可以存储序列化数据的自定义资源,应该继承自 ScriptableObject 。二者都继承自 Unity 的 Object 类,但提供了额外的功能来满足这些目的。
注意:Unity 的 Object 类位于 UnityEngine 命名空间。它与 .NET 的 Object 基类不同,虽然名称相同,但后者位于 System 命名空间,并且不包含在默认脚本模板中,因此名称不会发生冲突。如果您想在脚本中创建不需要在 Inspector 中指定的类,仍然可以从 .NET 的 System.Object 继承。
Unity 的 Object 类充当大多数 Unity 内置类的基类,例如 GameObject、 Component、Material、Texture、Mesh、Sprite 等等,这意味着所有这些类型都可以拖放到 Inspector 中的这些引用字段中。
如果 Inspector 中的字段指定了特定类型的类(例如 Texture),则 Unity 会限制您将任何其他类型的对象放入该字段中,并且对象选择器将仅显示正确类型的对象。
上图显示了 Inspector 中的三种类型的对象字段。
第一个是 Object 类型,这意味着可以将任何 Unity 对象指定给该字段。您可以将任何类型的对象放入该字段,无论是游戏对象、纹理、音频剪辑还是其他任何对象。这通常不是很有用,最好让字段接受的类型更加具体。
第二行显示它的类型是 “Texture”,如括号中所示。Texture 是一个内置的 Unity 类,这意味着您可以将任何 Texture 资源放入该字段。Unity 有两个类继承自该类,Texture2D 和 RenderTexture,这意味着您可以将这两种类型中的任何一种放入该字段中。
第三行显示它的类型是 “Food”。没有具有此名称的内置 Unity 类,因此此示例显示了一个继承自 Object 的用户创建的自定义类。如果您随后要创建继承自“Food”的类,例如“Apple”和“Banana”,可为 Food 字段指定对这些类的实例的引用,因为它们继承自该类。
Object 类提供了一些方法,允许您正确实例化和销毁它们,以及查找对特定类型对象的引用。
有关 Object 类的 API 的更多信息,请参阅对象的脚本参考页。