Version: Unity 6.0 (6000.0)
语言 : 中文
Overriding prefab instance data
未使用覆盖

实例覆盖

__实例覆盖__允许在预制件实例之间创建变化,同时仍将这些实例关联到同一预制件资源。

修改预制件资源时,更改将反映在其所有实例中。但是,也可以直接对单个实例进行修改。这样做会在该特定实例上创建__实例覆盖__。

例如,假设有一个预制件资源“Robot”,放置在游戏中的多个关卡中。但是,“Robot”的每个实例都有不同的速度值,并分配了不同的音频剪辑。

有四种不同的__实例覆盖__类型:

  • 覆盖属性的值

  • 添加组件

  • 删除组件

  • 添加子游戏对象

预制件实例存在一些限制:无法更改属于预制件的游戏对象的父级,且无法删除属于预制件的游戏对象。但是,可以停用游戏对象,这种操作很适合取代游戏对象删除操作(这算作属性覆盖)。

在检视面板窗口中,实例覆盖的名称标签以粗体显示,左边距使用蓝线显示。向预制件实例添加新组件时,边距位置的蓝线将涵盖整个组件。

检视面板窗口显示的预制件实例覆盖了“Is Trigger”属性,并添加了刚体组件作为覆盖。
检视面板窗口显示的预制件实例覆盖了“Is Trigger”属性,并添加了刚体组件作为覆盖。

添加和删除的组件在检视面板中的相应图标上也有加减符号标示,而添加的游戏对象在层级视图窗口中的相应图标上有一个加号标示。

在层级视图窗口中,带有覆盖值或非默认值的预制件实例会有一个“覆盖指示符”,用以表明它们已被编辑,Unity 会在左侧空白区域显示一条蓝线作为该指示符,其外观与检视面板窗口中实例覆盖项的蓝线一致。有关更多信息,请参阅层级视图

层级视图窗口显示的预制件实例添加了一个名为“GermOBlaster”的子游戏对象作为覆盖。
层级视图窗口显示的预制件实例添加了一个名为“GermOBlaster”的子游戏对象作为覆盖。

覆盖优先

预制件实例上覆盖的属性值始终优先于预制件资源的值。这意味着,如果更改预制件资源的属性,对覆盖该属性的实例没有任何影响。

如果对预制件资源进行更改,但未按预期更新所有实例,则应检查实例上是否覆盖了该属性。最好仅在确实必要时才使用实例覆盖,因为如果整个项目中有大量实例覆盖,则很难判断对预制件资源的更改是否对所有实例都有影响。

对齐根据特定预制件实例而定

预制件实例的__对齐__是一种特殊情况,与其他属性的处理方式不同。对齐__值绝不会从预制件资源传递到预制件实例。这意味着对齐值始终可与预制件资源的对齐不同,而不是作为显式实例覆盖。具体来说,这里的对齐指预制件实例的根层级变换组件的__位置 (Position) 和__旋转 (Rotation)__ 属性,对于矩形变换,还包括__宽度 (Width)高度 (Height)边距 (Margins)锚点 (Anchors)__ 和__轴心 (Pivot)__ 属性。

这是因为要求预制件的多个实例采用相同的位置和旋转是极其罕见的情况。更常见的情况是希望预制件实例具有不同的位置和旋转,因此 Unity 不会将它们视为预制件覆盖。

无用覆盖

如果声明实例覆盖值的脚本被修改或删除,表示实例覆盖值的数据可能会变为无用状态。如果发生这种情况,您可以删除无用状态的覆盖数据

Overriding prefab instance data
未使用覆盖