实例覆盖值作为数据存储在定义它们的场景或预制件中。但是,如果覆盖的目标对象无效或其属性路径未知,则覆盖将变为“未使用”。在这种情况下,数据将变为未使用。数据仍然存储在场景文件中,但为冗余数据。
例如,如果覆盖附加到预制件的脚本上的公共字段的值,然后删除脚本,则包含覆盖值的数据将变为未使用,因为其目标是不再存在的对象。
如果删除或重命名公共字段定义,则覆盖数据也会变为未使用,因为属性路径不再匹配存储的数据,尽管组件对象本身仍然存在。
由于 Unity 不会自动删除未使用覆盖数据,因此如果恢复已删除的脚本或字段定义,则覆盖数据将再次使用,并像以前一样作为覆盖应用。
如果不想保留未使用覆盖数据,可使用检视面板中的 Overrides 菜单或从层级视图窗口中的上下文菜单中检查和删除这些数据。删除包括所有未使用覆盖,Unity 会将删除内容的详细信息写入编辑器日志。
Unity 编辑器无法自动确定何时或是否应清理未使用数据,因为您可能临时或意外地移动了数据引用的对象或属性,稍后可能会将其恢复。删除您不再需要的未使用覆盖数据可视为一种良好做法,因为这意味着场景文件仅包含有用的数据,这有助于简化版本控制和协作。
注意:您可以使用 FormerlySerializedAsAttribute 重命名公共字段并保留相关的覆盖值,该属性执行名称转换以将字段的旧名称映射到新名称。
要使用检视面板检查和删除未使用覆盖,请执行以下操作:
注意:未使用覆盖面板支持多重选择,并显示未使用覆盖的总数以及受影响的实例数,但仅显示最多三个未使用覆盖的字段名称、游戏对象名称和值,如下例所示:
要在层级视图窗口中检查和删除未使用实例覆盖:
注意:可以通过右键单击层级视图中的场景名称而不是单个游戏对象来删除整个场景中的所有未使用覆盖。