Version: 2023.1
覆盖多个级别
解压缩预制件实例

Unused Overrides

Instance override values are stored as data in the scene or prefab in which they are defined. However, an override becomes “unused” if its target object is either invalid or its Property Path is unknown. In this case, the data becomes unused. It is still stored in the scene file, but is redundant.

For example, if you override the values of a public field on a script attached to a prefab, and then delete the script, the data that contains the override values becomes unused because it targets an object that no longer exists.

Override data also becomes unused if you delete the public field definition, or rename it, because the Property Path no longer matches the stored data, although the component object itself still exists.

Because Unity does not automatically delete unused override data, if you restore the deleted script, or field definition, the override data becomes used again and is applied as an override as before.

If you do not want to keep unused override data, you can check for and remove them using the Overrides menu in the inspector, or from the context menu in the Hierarchy window. The removal includes all unused overrides, and Unity writes details of what was removed to the Editor log.

The Unity Editor can’t automatically determine when or whether your unused data should be cleaned up, because you may have temporarily or accidentally moved the object or property the data refers to, and you might reinstate it later. Removing unused override data that you know you no longer need can be thought of as good practice, because it means your scene file only contains useful data, which can help make version control and collaboration simpler.

Note: You can rename public fields and preserve the associated overridden values by using FormerlySerializedAsAttribute, which performs name conversion to map the field’s old name to its new name.

The prefab overrides dropdown

To check for and remove unused overrides using the Inspector:

  1. Select the GameObject(s) that you want to work on.
  2. In the inspector, click the Overrides drop-down menu [A]. If there are any unused overrides present, the menu will show an “Unused overrides” option [B], otherwise the “Unused overrides” option is not displayed.
  3. Click Unused Overrides to open the unused overrides panel.
  4. The unused overrides panel [C] lists the unused overrides, and has a Remove button.
  5. Click the Remove button to remove the unused overrides.
The unused overrides panel, showing two unused overrides on the selected prefab.
The unused overrides panel, showing two unused overrides on the selected prefab.

Note: The unused overrides panel supports multiple selection, and shows the total number of unused overrides, and the number of instances affected, however it only shows the field name, GameObject name, and value, of up to three of the unused overrides, as shown in the example below:

The unused overrides panel, showing 24 unused overrides on 3 separate prefab instances.
The unused overrides panel, showing 24 unused overrides on 3 separate prefab instances.

The Hierarchy context menu

To check for and remove unused instance overrides from the Hierarchy window:

  1. Select the GameObject(s) that you want to work on.
  2. In the Hierarchy window, right-click on one of the selected objects, and select: Prefab > Remove Unused Overrides
  3. Unity displays a dialog box showing the number of unused overrides, if any.
  4. Click the Remove button to remove the unused overrides.
The dialog box shown when removing unused overrides from the Hierarchy window context menu.
The dialog box shown when removing unused overrides from the Hierarchy window context menu.

Note: You can remove all unused overrides in an entire scene by right-clicking the scene’s name in the hierarchy instead of individual GameObjects.

覆盖多个级别
解压缩预制件实例