Параметры
objectToUndo | Недавно созданный объект. Этот объект уничтожается при выполнении операции отмены. Когда значением является GameObject, Unity регистрирует GameObject и его дочерние GameObject, но не родственные или родительские GameObject. |
name | Имя действия, которое необходимо отменить. Используйте эту строку для предоставления краткого описания действия, которое необходимо отменить. Для элементов Отменить или Повторить в меню Правка Unity добавляет «Отменить» или «Повторить» к предоставленной вами строке. Например, если указать строку «Создать игровой объект», редактор Unity отобразит пункт меню Изменить > Отменить создание игрового объекта. |
Описание
Регистрирует операцию отмены для отмены создания объекта.
Этот метод регистрирует создание объекта в стеке отмены, чтобы пользователи могли отменить действие создания объекта. Используйте этот метод каждый раз, когда вы определяете действие, которое создает объект, например, внутри пользовательского редактора или пункта меню. Unity обновляет действие отмены в меню Edit именем операции отмены. Когда пользователь выполняет действие отмены, Unity уничтожает объект.
Примечание. Процесс отмены уничтожает объекты так же, как Object.Destroy, но без задержки.
При одновременном создании и изменении объекта используйте следующий рабочий процесс, чтобы убедиться, что Undo.RegisterCreatedObjectUndo сохраняет все обновления объекта:
- Создайте объект.
- Зарегистрируйте объект как созданный с помощью
Undo.RegisterCreatedObjectUndo
. - Зарегистрируйте объект с помощью Undo.RegisterCompleteObjectUndo, чтобы Unity записывала изменения объекта.
- Обновите объект.
Если вы не будете следовать этому рабочему процессу, 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");
}
}