Undo.RegisterFullObjectHierarchyUndo
Declaration
public static void RegisterFullObjectHierarchyUndo(Object objectToUndo, string name);Параметры
| Параметр | Описание |
|---|---|
| objectToUndo | Объект, используемый для определения иерархии объектов, изменения состояния которых должны быть отменены. |
| имя | Имя операции отмены. |
Описание
Копирование состояний иерархии объектов в стек отмены действий.
Эта функция работает аналогично Undo.RegisterCompleteObjectUndo. Основное отличие состоит в том, что вместо копирования состояний одного объекта, эта функция хранит состояния иерархии объектов. В зависимости от типа objectToUndo, иерархия определяется по-разному:
* Если objectToUndo является игровым объектом, иерархия будет содержать (a) сам objectToUndo и его дочерние игровые объекты; (b) компоненты, присоединенные к этим игровым объектам.
* Если objectToUndo является компонентом, присоединенным к существующему игровому объекту, иерархия будет содержать GameObject и все его компоненты, включая objectToUndo. Дочерние игровые объекты в этом случае являются NOT.
* Во всех других случаях иерархия будет содержать только сам objectToUndo. Это эквивалентно вызову Undo.RegisterCompleteObjectUndo с теми же параметрами.
Если выполнить отмену, любые изменения, сделанные в объектах указанной иерархии после вызова этой функции, будут отменены, и объекты будут восстановлены в записанное состояние.
Transform родительское изменение, AddComponent, и уничтожение объекта не могут быть восстановлены с помощью этой функции, для этого вы должны использовать выделенные функции. См. Undo.SetTransformParent, Undo.AddComponent, Undo.DestroyObjectImmediate.
Если какой-либо объект является частью текущего Scene (e.g. GameObject в окне Hierarchy или компонент, прикрепленный к такому игровому объекту), вызов этой функции немедленно пометит Scene как измененный, даже если вы не измените состояния объектов после этого.
using UnityEngine; using UnityEditor;
public class UndoExamples { [MenuItem("Undo Examples/RegisterFullObjectHierarchyUndo 1")] static void Example1() { GameObject root = new GameObject("Root"); MeshRenderer rootComponent1 = root.AddComponent<MeshRenderer>(); MeshCollider rootComponent2 = root.AddComponent<MeshCollider>();
GameObject child = new GameObject("Child"); child.transform.parent = root.transform; MeshRenderer childComponent1 = child.AddComponent<MeshRenderer>(); MeshCollider childComponent2 = child.AddComponent<MeshCollider>();
// Store the states of 'root' and its children. Undo.RegisterFullObjectHierarchyUndo(root, "full object hierarchy change");
root.name = "New Root"; child.name = "New Child";
rootComponent1.enabled = false; rootComponent2.enabled = false;
childComponent1.enabled = false; childComponent2.enabled = false;
// If you choose "Edit->Undo full object hierarchy change" from the main menu now, // the states of both game objects and their components will be restored to what they were right before calling Undo.RegisterFullObjectHierarchyUndo. } }
using UnityEngine; using UnityEditor;
public class UndoExamples { [MenuItem("Undo Examples/RegisterFullObjectHierarchyUndo 2")] static void Example2() { GameObject root = new GameObject("Root"); MeshRenderer rootComponent1 = root.AddComponent<MeshRenderer>(); MeshCollider rootComponent2 = root.AddComponent<MeshCollider>();
GameObject child = new GameObject("Child"); child.transform.parent = root.transform; MeshRenderer childComponent1 = child.AddComponent<MeshRenderer>(); MeshCollider childComponent2 = child.AddComponent<MeshCollider>();
// Store the states of 'root' and all of its components. Undo.RegisterFullObjectHierarchyUndo(rootComponent1, "full object hierarchy change");
root.name = "New Root"; child.name = "New Child";
rootComponent1.enabled = false; rootComponent2.enabled = false;
childComponent1.enabled = false; childComponent2.enabled = false;
// If you choose "Edit->Undo full object hierarchy change" from the main menu now, // the states of 'root' and all of its components will be restored to what they were right before calling Undo.RegisterFullObjectHierarchyUndo, // but changes made to 'child' and its components won't be restored. } }
Declaration
Obsolete public static void RegisterFullObjectHierarchyUndo(Object objectToUndo);Описание
Эта перегрузка устарела. Используйте Undo.RegisterFullObjectHierarchyUndo(Object, string) вместо этого.