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

Undo.RegisterCreatedObjectUndo

Declaration

public static void RegisterCreatedObjectUndo(Object objectToUndo, string name);

Параметры

Параметр Описание
objectToUndo Вновь созданный объект. Этот объект уничтожается при выполнении операции отмены. Когда значением является GameObject, Unity регистрирует GameObject и его дочернюю GameObjects, но не регистрирует родственную или родительскую GameObjects.
имя Имя действия, которое нужно отменить. Используйте эту строку для краткого описания действия, которое нужно отменить. Для пунктов Отменить или Повторить в меню Изменить, Unity добавляет "Отменить" или "Повторить" к строке, которую вы указываете. Например, если вы указываете строку "Создать GameObject", Unity Editor отображает пункт меню Изменить > Отменить Создать GameObject.

Описание

Регистрирует операцию отмены для отмены создания объекта.

Этот метод регистрирует создание объекта в стеке отмены, чтобы пользователи могли отменить действие по созданию объекта. Используйте этот метод каждый раз, когда вы определяете действие, которое создает объект, например, в пользовательском редакторе или пункте меню. Unity обновляет действие отмены в меню Изменить с именем операции отмены. Когда пользователь выполняет действие отмены, Unity уничтожает объект.

Примечание: Процесс отмены уничтожает объекты так же, как Object.Destroy, но без задержки.

При одновременном создании и изменении объекта используйте следующий рабочий процесс, чтобы убедиться, что Undo.RegisterCreatedObjectUndo сохраняет все изменения объекта:

  1. Создать объект.
  2. Зарегистрировать объект как созданный с помощью Undo.RegisterCreatedObjectUndo.
  3. Зарегистрируйте объект с Undo.RegisterCompleteObjectUndo, чтобы Редактор записывал изменения в объекте. Если объект имеет дочерние GameObjects, зарегистрируйте его с Undo.RegisterFullObjectHierarchyUndo.
  4. Обновить объект.

Если вы не следуете этому рабочему процессу, Undo.RegisterCreatedObjectUndo может не сохранять какие-либо обновления объекта, кроме создания объекта.

При регистрации нового объекта в Undo.RegisterCreatedObjectUndo, Unity регистрирует любые изменения в объектах, которые в настоящее время регистрируются Undo.RecordObject Это означает, что после регистрации нового объекта, Unity не регистрирует никаких последующих изменений в любых других объектах, Undo.RecordObject Я уже записывал.

Когда Unity уже регистрирует изменения в существующих объектах с помощью Undo.RecordObject и вы хотите зарегистрировать вновь созданные объекты, рекомендуется следовать следующему рабочему процессу:

  1. Завершите любые изменения, которые вы хотите внести в объекты, записываемые Undo.RecordObject. Unity автоматически вызывает Undo.FlushUndoRecordObjects.
  2. Зарегистрировать вновь созданные объекты с Undo.RegisterCreatedObjectUndo.

Если не следовать этому рабочему процессу, Unity может неправильно сохранить состояние записанных объектов в стеке отмены.

В следующем примере показано, как создать и изменить GameObject с дочерним объектом как операцию, которую можно отменить в одном шаге отмены.

using UnityEditor;
using UnityEngine;

class CreateGameObjectMenu { [MenuItem("Example/Create GameObject")] static void CreateGameObject() { // Create new undo group Undo.IncrementCurrentGroup();

// Create GameObject hierarchy GameObject go = new GameObject("my GameObject"); Undo.RegisterCreatedObjectUndo(go, "Create my GameObject"); GameObject child = new GameObject(); Undo.RegisterCreatedObjectUndo(child, "Create child"); Undo.SetTransformParent(child.transform, go.transform, "Modify parent");

// Move GameObject hierarchy Undo.RegisterFullObjectHierarchyUndo(go, "Update my GameObject position"); go.transform.position = new Vector3(5, 5, 5);

// Name undo group Undo.SetCurrentGroupName("Create and Reposition GameObject with Child"); } }

Примечание: Эта операция не может быть выполнена, если isProcessing является true.