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 сохраняет все изменения объекта:
- Создать объект.
- Зарегистрировать объект как созданный с помощью
Undo.RegisterCreatedObjectUndo. - Зарегистрируйте объект с Undo.RegisterCompleteObjectUndo, чтобы Редактор записывал изменения в объекте. Если объект имеет дочерние GameObjects, зарегистрируйте его с Undo.RegisterFullObjectHierarchyUndo.
- Обновить объект.
Если вы не следуете этому рабочему процессу, Undo.RegisterCreatedObjectUndo может не сохранять какие-либо обновления объекта, кроме создания объекта.
При регистрации нового объекта в Undo.RegisterCreatedObjectUndo, Unity регистрирует любые изменения в объектах, которые в настоящее время регистрируются Undo.RecordObject Это означает, что после регистрации нового объекта, Unity не регистрирует никаких последующих изменений в любых других объектах, Undo.RecordObject Я уже записывал.
Когда Unity уже регистрирует изменения в существующих объектах с помощью Undo.RecordObject и вы хотите зарегистрировать вновь созданные объекты, рекомендуется следовать следующему рабочему процессу:
- Завершите любые изменения, которые вы хотите внести в объекты, записываемые
Undo.RecordObject. Unity автоматически вызывает Undo.FlushUndoRecordObjects. - Зарегистрировать вновь созданные объекты с
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.