gameObjectInInstance | A GameObject in the Prefab instance containing the removed GameObject. |
assetGameObject | The GameObject on the Prefab Asset corresponding to the removed GameObject on the instance. |
action | The interaction mode for this action. |
Adds this removed GameObject back on the Prefab instance.
After the revert action the GameObject will once again exist on the Prefab instance.
The GameObject's components and children will also exist again, unless they had previously been removed.
Note that added GameObjects and added component overrides, which were in the hierarchy of the reverted GameObject before it was removed, will not be restored.
See Also: 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"); } }
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.