EditorUndoRedoManager
Управляет историей отмен открытых сцен, в редакторе.
Управляет историей отмен открытых сцен, в редакторе.
EditorUndoRedoManager — это менеджер для объектов UndoRedo, связанных с отредактированными сценами. Каждая сцена имеет собственную историю отмен, а EditorUndoRedoManager гарантирует, что каждое действие, выполненное в редакторе, будет связано с соответствующей сценой. Для действий, не связанных со сценами (редактирование ProjectSettings, внешние ресурсы и т. д.), используется отдельная глобальная история.
Использование в основном такое же, как и UndoRedo. Вы создаете и фиксируете действия, а менеджер автоматически решает изнутри, к каким сценам они относятся. Сцена выводится на основе первой операции в действии с использованием объекта из операции. Правила следующие:
- Если объект —
Entity, используйте текущую отредактированную сцену; - Если объект — встроенный ресурс, используйте сцену из его пути;
- Если объект — внешний ресурс или что-то еще, используйте глобальную историю.
Иногда это предположение может давать ложные результаты, поэтому вы можете предоставить пользовательский объект контекста при создании действия.
EditorUndoRedoManagerпредназначен для использования плагинами редактора Reckfell. Вы можете получить его с помощьюEditorPlugin.GetUndoRedo. Для нередакторного использования или плагинов, которым не нужно интегрироваться с историей отмен редактора, используйте вместо этогоUndoRedo. API менеджера в основном такой же, как вUndoRedo, поэтому вы можете обратиться к его документации за дополнительными примерами. Главное отличие в том, чтоEditorUndoRedoManagerиспользует объект + имя метода для действий вместоCallable.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Методы17
AddDoMethod2 перегрузки
public void AddDoMethod(ReckfellObject @object, StringName method, params Variant[] args);Зарегистрируйте метод, который будет вызван при фиксации действия (т. е. действие «do»).
Если это первая операция, object будет использоваться для вывода истории отмены цели.
| Имя | Тип | По умолчанию |
|---|---|---|
object | ReckfellObject | — |
method | StringName | — |
args | Variant[] | — |
public void AddDoMethod(ReckfellObject @object, StringName method, ReadOnlySpan<Variant> args);Зарегистрируйте метод, который будет вызван при фиксации действия (т. е. действие «do»).
Если это первая операция, object будет использоваться для вывода истории отмены цели.
| Имя | Тип | По умолчанию |
|---|---|---|
object | ReckfellObject | — |
method | StringName | — |
args | ReadOnlySpan<Variant> | — |
AddDoPropertyvoid
public void AddDoProperty(ReckfellObject @object, StringName property, Variant value);Зарегистрируйте изменение значения свойства для "do".
Если это первая операция, object будет использоваться для вывода истории отмены цели.
| Имя | Тип | По умолчанию |
|---|---|---|
object | ReckfellObject | — |
property | StringName | — |
value | Variant | — |
AddDoReferencevoid
public void AddDoReference(ReckfellObject @object);Зарегистрируйте ссылку для "do", которая будет стерта, если история "do" будет утеряна. Это полезно в основном для новых узлов, созданных для вызова "do". Не используйте для ресурсов.
| Имя | Тип | По умолчанию |
|---|---|---|
object | ReckfellObject | — |
AddUndoMethod2 перегрузки
public void AddUndoMethod(ReckfellObject @object, StringName method, params Variant[] args);Зарегистрируйте метод, который будет вызван при отмене действия (т. е. действие «отменить»).
Если это первая операция, object будет использоваться для вывода целевой истории отмен.
| Имя | Тип | По умолчанию |
|---|---|---|
object | ReckfellObject | — |
method | StringName | — |
args | Variant[] | — |
public void AddUndoMethod(ReckfellObject @object, StringName method, ReadOnlySpan<Variant> args);Зарегистрируйте метод, который будет вызван при отмене действия (т. е. действие «отменить»).
Если это первая операция, object будет использоваться для вывода целевой истории отмен.
| Имя | Тип | По умолчанию |
|---|---|---|
object | ReckfellObject | — |
method | StringName | — |
args | ReadOnlySpan<Variant> | — |
AddUndoPropertyvoid
public void AddUndoProperty(ReckfellObject @object, StringName property, Variant value);Зарегистрируйте изменение значения свойства для «отмены».
Если это первая операция, object будет использоваться для вывода целевой истории отмен.
| Имя | Тип | По умолчанию |
|---|---|---|
object | ReckfellObject | — |
property | StringName | — |
value | Variant | — |
AddUndoReferencevoid
public void AddUndoReference(ReckfellObject @object);Зарегистрируйте ссылку для "отмены", которая будет стерта, если история "отмены" будет утеряна. Это полезно в основном для узлов, удаленных с помощью вызова "do" (а не вызова "undo"!).
| Имя | Тип | По умолчанию |
|---|---|---|
object | ReckfellObject | — |
ClearHistoryvoid
public void ClearHistory(int id = -99, bool increaseVersion = true);Очищает указанную историю отмены. Вы можете очистить историю для конкретной сцены, глобальную историю или для всех историй одновременно (кроме EditorUndoRedoManager.SpecialHistory.RemoteHistory), если id равно EditorUndoRedoManager.SpecialHistory.InvalidHistory.
Если increase_version равно true, версия истории отмены будет увеличена, помечая её как несохранённую. Полезно для операций, изменяющих сцену, но не поддерживающих отмену.
Примечание: Если вы хотите пометить отредактированную сцену как несохраненную, не очищая ее историю, используйте вместо этого EditorInterface.MarkSceneAsUnsaved.
| Имя | Тип | По умолчанию |
|---|---|---|
id | int | -99 |
increaseVersion | bool | true |
CommitActionvoid
public void CommitAction(bool execute = true);Фиксирует действие. Если execute равен true (по умолчанию), все методы/свойства "do" вызываются/устанавливаются при вызове этой функции.
| Имя | Тип | По умолчанию |
|---|---|---|
execute | bool | true |
CreateAction3 перегрузки
public void CreateAction(string name, UndoRedo.MergeMode mergeMode, ReckfellObject customContext);Создайте новое действие. После вызова выполните все вызовы EditorUndoRedoManager.AddDoMethod, EditorUndoRedoManager.AddUndoMethod, EditorUndoRedoManager.AddDoProperty и EditorUndoRedoManager.AddUndoProperty, затем зафиксируйте действие с помощью EditorUndoRedoManager.CommitAction.
Способ объединения действий определяется аргументом merge_mode.
Если указан объект custom_context, он будет использоваться для вывода целевой истории (вместо использования первой операции).
Способ упорядочивания операций отмены в действиях определяется backward_undo_ops. Если backward_undo_ops равен false, параметры отмены упорядочиваются в том же порядке, в котором они были добавлены. Это означает, что первая добавленная операция будет первой отмененной.
Если mark_unsaved равен false, действие не пометит историю как несохраненную. Это полезно, например, для действий, которые изменяют выбор или настройку, которая будет сохранена автоматически. В противном случае следует оставить true, если действие требует сохранения пользователем или если оно может привести к потере данных, если его не сохранить.
| Имя | Тип | По умолчанию |
|---|---|---|
name | string | — |
mergeMode | UndoRedo.MergeMode | — |
customContext | ReckfellObject | — |
public void CreateAction(string name, UndoRedo.MergeMode mergeMode, ReckfellObject customContext, bool backwardUndoOps);Создайте новое действие. После вызова выполните все вызовы EditorUndoRedoManager.AddDoMethod, EditorUndoRedoManager.AddUndoMethod, EditorUndoRedoManager.AddDoProperty и EditorUndoRedoManager.AddUndoProperty, затем зафиксируйте действие с помощью EditorUndoRedoManager.CommitAction.
Способ объединения действий определяется аргументом merge_mode.
Если указан объект custom_context, он будет использоваться для вывода целевой истории (вместо использования первой операции).
Способ упорядочивания операций отмены в действиях определяется backward_undo_ops. Если backward_undo_ops равен false, параметры отмены упорядочиваются в том же порядке, в котором они были добавлены. Это означает, что первая добавленная операция будет первой отмененной.
Если mark_unsaved равен false, действие не пометит историю как несохраненную. Это полезно, например, для действий, которые изменяют выбор или настройку, которая будет сохранена автоматически. В противном случае следует оставить true, если действие требует сохранения пользователем или если оно может привести к потере данных, если его не сохранить.
| Имя | Тип | По умолчанию |
|---|---|---|
name | string | — |
mergeMode | UndoRedo.MergeMode | — |
customContext | ReckfellObject | — |
backwardUndoOps | bool | — |
public void CreateAction(string name, UndoRedo.MergeMode mergeMode = UndoRedo.MergeMode.Disable, ReckfellObject customContext = null, bool backwardUndoOps = false, bool markUnsaved = true);Создайте новое действие. После вызова выполните все вызовы EditorUndoRedoManager.AddDoMethod, EditorUndoRedoManager.AddUndoMethod, EditorUndoRedoManager.AddDoProperty и EditorUndoRedoManager.AddUndoProperty, затем зафиксируйте действие с помощью EditorUndoRedoManager.CommitAction.
Способ объединения действий определяется аргументом merge_mode.
Если указан объект custom_context, он будет использоваться для вывода целевой истории (вместо использования первой операции).
Способ упорядочивания операций отмены в действиях определяется backward_undo_ops. Если backward_undo_ops равен false, параметры отмены упорядочиваются в том же порядке, в котором они были добавлены. Это означает, что первая добавленная операция будет первой отмененной.
Если mark_unsaved равен false, действие не пометит историю как несохраненную. Это полезно, например, для действий, которые изменяют выбор или настройку, которая будет сохранена автоматически. В противном случае следует оставить true, если действие требует сохранения пользователем или если оно может привести к потере данных, если его не сохранить.
| Имя | Тип | По умолчанию |
|---|---|---|
name | string | — |
mergeMode | UndoRedo.MergeMode | UndoRedo.MergeMode.Disable |
customContext | ReckfellObject | null |
backwardUndoOps | bool | false |
markUnsaved | bool | true |
ForceFixedHistoryvoid
public void ForceFixedHistory();Заставляет следующую операцию (например, EditorUndoRedoManager.AddDoMethod) использовать историю действия, а не угадывать ее из объекта. Иногда это необходимо, когда историю невозможно правильно определить, например, для вложенного ресурса, у которого еще нет пути.
Этот метод следует использовать только в случае крайней необходимости, в противном случае он может привести к недопустимому состоянию истории. Для большинства сложных случаев достаточно параметра custom_context EditorUndoRedoManager.CreateAction.
GetHistoryUndoRedoUndoRedo
public UndoRedo GetHistoryUndoRedo(int id);Возвращает объект UndoRedo, связанный с заданной историей id.
id выше 0 сопоставляются с открытыми вкладками сцены (но не соответствуют их порядку). id 0 или ниже имеют особое значение (см. EditorUndoRedoManager.SpecialHistory).
Лучше всего использовать с EditorUndoRedoManager.GetObjectHistoryId. Этот метод предоставляется только в случае, если вам нужны более продвинутые методы UndoRedo (но имейте в виду, что прямая работа с объектом UndoRedo может повлиять на стабильность редактора).
| Имя | Тип | По умолчанию |
|---|---|---|
id | int | — |
UndoRedoGetObjectHistoryIdint
public int GetObjectHistoryId(ReckfellObject @object);Возвращает идентификатор истории, выведенный из заданного object. Его можно использовать с EditorUndoRedoManager.GetHistoryUndoRedo.
| Имя | Тип | По умолчанию |
|---|---|---|
object | ReckfellObject | — |
intIsCommittingActionbool
public bool IsCommittingAction();Возвращает true, если EditorUndoRedoManager в данный момент фиксирует действие, т. е. запускает свой метод «do» или изменение свойства (см. EditorUndoRedoManager.CommitAction).
boolСигналы и события2
HistoryChangedСобытие
public event Action HistoryChanged;Генерируется при изменении списка действий в любой истории, либо при совершении действия, либо при очистке истории.
VersionChangedСобытие
public event Action VersionChanged;Генерируется, когда версия истории изменилась в результате отмены или повтора вызова.
EditorUndoRedoManager.SpecialHistory
| Значение | Описание |
|---|---|
GlobalHistory = 0 | Глобальная история не связана с какой-либо сценой, а связана с внешними ресурсами и т. д. ВРЕМЕННАЯ ИСТОРИЯ |
InvalidHistory = -99 | Недопустимая "null" история. Это особое значение, не связанное ни с одним объектом. |
RemoteHistory = -9 | История, связанная с удаленным инспектором. Используется при редактировании в реальном времени запущенного проекта. |