PrefabUtility.RevertRemovedGameObject
Declaration
public static void RevertRemovedGameObject(GameObject gameObjectInInstance, GameObject assetGameObject, InteractionMode action);Параметры
| Параметр | Описание |
|---|---|
| gameObjectInInstance | GameObject в экземпляре Префаб, содержащем удаленный GameObject. |
| assetGameObject | GameObject на Ассете Префаб, соответствующий удаленному GameObject на экземпляре. |
| действия | Режим взаимодействия для этого действия. |
Описание
Добавляет этот удаленный GameObject обратно в экземпляр Префаб.
После возврата GameObject вновь появится в экземпляре Префаб.
Компоненты и дочерние объекты GameObject также появятся вновь, если они не были удалены ранее.
Обратите внимание, что добавленные GameObjects и добавленные переопределения компонентов, которые были в иерархии возвращенного GameObject до его удаления, не будут восстановлены.
Дополнительные ресурсы: PrefabUtility.ApplyRemovedGameObject, PrefabUtility.GetRemovedGameObjects.
using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine;
// Creates new menu items under 'Examples' in the main menu. public class RevertRemovedGameObjectExample { [MenuItem("Examples/RevertRemovedGameObject Example 1")] static void CreatePrefabAndRevertChanges() { // Create folder Prefabs and set the path as within the Prefabs folder, // and name it as the GameObject's name with the .Prefab format if (!Directory.Exists("Assets/Prefabs")) AssetDatabase.CreateFolder("Assets", "Prefabs");
//Setup hierarchy with root and one child GameObject rootGameObject = new GameObject("Root"); GameObject child = new GameObject("Child"); child.transform.parent = rootGameObject.transform;
//Create prefab based on the GameObject hierarchy we just created GameObject prefabAsset = PrefabUtility.SaveAsPrefabAssetAndConnect(rootGameObject, "Assets/Prefabs/" + rootGameObject.name + ".prefab", InteractionMode.AutomatedAction);
//Get the corresponding object matching the Child GameObject that was destroyed GameObject correspondingChildGameObject = prefabAsset.transform.GetChild(0).gameObject;
//Destroy child GameObject so we can apply the override to the Prefab Object.DestroyImmediate(child);
//Use the variables from above to revert the removed GameObject override in the instance and restore the child GameObject PrefabUtility.RevertRemovedGameObject(rootGameObject, correspondingChildGameObject, InteractionMode.AutomatedAction);
if (prefabAsset.transform.childCount == 1) Debug.Log("'Child' GameObject was removed and the override reverted successfully."); else Debug.Log("The override was not reverted successfully"); }
[MenuItem("Examples/RevertRemovedGameObject Example 2")] static void CreatePrefabAndApplyChangesWithGetRemovedGameObjects() { // Create folder Prefabs and set the path as within the Prefabs folder, // and name it as the GameObject's name with the .Prefab format if (!Directory.Exists("Assets/Prefabs")) AssetDatabase.CreateFolder("Assets", "Prefabs");
//Setup hierarchy with root and one child GameObject rootGameObject = new GameObject("Root"); GameObject child = new GameObject("Child"); child.transform.parent = rootGameObject.transform;
//Create prefab based on the GameObject hierarchy we just created GameObject prefabAsset = PrefabUtility.SaveAsPrefabAssetAndConnect(rootGameObject, "Assets/Prefabs/" + rootGameObject.name + ".prefab", InteractionMode.AutomatedAction);
//Destroy child GameObject so we can apply the override to the Prefab Object.DestroyImmediate(child);
//Get the override and the information to apply the changes to the Prefab asset List<RemovedGameObject> removedGameObjects = PrefabUtility.GetRemovedGameObjects(rootGameObject); GameObject assetGameObject = removedGameObjects[0].assetGameObject; GameObject parentOfRemovedGameObjectInInstance = removedGameObjects[0].parentOfRemovedGameObjectInInstance;
//Use the variables from above to revert the removed GameObject override in the instance and restore the child GameObject PrefabUtility.RevertRemovedGameObject(parentOfRemovedGameObjectInInstance, assetGameObject, InteractionMode.AutomatedAction);
if (prefabAsset.transform.childCount == 1) Debug.Log("'Child' GameObject was removed and the override reverted successfully."); else Debug.Log("The override was not reverted successfully"); } }