Unity 6.3
0 онлайн 33 гостей 3 в системе
Вход

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) вместо этого.