Version: 2023.2
言語: 日本語
複数レベルでのオーバーライド
プレハブインスタンスの展開

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.

複数レベルでのオーバーライド
プレハブインスタンスの展開
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961