Параметры
objectToUndo | Объект, используемый для определения иерархии объектов, изменения состояния которых необходимо отменить. |
name | Имя операции отмены. |
Описание
Копировать состояния иерархии объектов в стек отмены.
Эта функция работает аналогично Undo.RegisterCompleteObjectUndo. Ключевое отличие состоит в том, что вместо копирования состояний одного объекта эта функция сохраняет состояния иерархии объектов. В зависимости от типа objectToUndo
иерархия определяется по-разному:
* Если objectToUndo
является игровым объектом, иерархия будет содержать (a) сам objectToUndo
и его дочерние игровые объекты; (б) компоненты, прикрепленные к этим игровым объектам.
* Если objectToUndo
является компонентом, прикрепленным к существующему игровому объекту, иерархия будет содержать игровой объект и все его компоненты, включая объектОтменить
. Дочерние игровые объекты в данном случае НЕ участвуют.
* Во всех остальных случаях иерархия будет содержать только сам objectToUndo
. Это эквивалентно вызову Undo.RegisterCompleteObjectUndo с теми же параметрами.
Если выполняется отмена, любые изменения, внесенные в объекты в описанной выше иерархии после вызова этой функции, будут отменены, и объекты будут восстановлены в записанном состоянии.
Преобразование, изменение родительского объекта, добавление компонента и уничтожение объекта не могут быть восстановлены с помощью этой функции, для этого следует использовать специальные функции. См. разделы Undo.SetTransformParent, Undo.AddComponent, Undo.DestroyObjectImmediate. .
Если какой-либо задействованный объект является частью текущей Сцены (например, игровой объект в окне Иерархия или компонент, присоединенный к такому игровому объекту), вызов этой функции немедленно пометит Сцену как измененную, даже если вы на самом деле этого не сделали. впоследствии изменить состояния объектов.
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.
}
}
Объявление
public static void RegisterFullObjectHierarchyUndo(Object objectToUndo);Описание
Эта перегрузка устарела. Вместо этого используйте Undo.RegisterFullObjectHierarchyUndo(Object, string).