EditorUndoRedoManager

继承: Object

管理在编辑器中打开的场景的撤消历史记录。

描述

EditorUndoRedoManager是与已编辑场景关联的UndoRedo对象的管理器。每个场景都有自己的撤消历史记录,EditorUndoRedoManager确保编辑器中执行的每个操作都与正确的场景相关联。对于与场景无关的操作(ProjectSettings编辑、外部资源等),使用单独的全局历史记录。

用法与UndoRedo基本相同。您创建并提交操作,管理器会自动决定它属于哪些场景。场景是根据动作中的第一个操作推断出来的,使用操作中的对象。规则如下:

-如果对象是Item,则使用当前编辑的场景;

-如果对象是内置资源,请使用其路径中的场景;

-如果对象是外部资源或其他任何东西,请使用全局历史记录。

这种猜测有时会产生错误的结果,因此您可以在创建操作时提供自定义上下文对象。

EditorUndoRedoManager旨在供i3D编辑器插件使用。您可以使用EditorPlugin.get_undo_redo()获取它。对于非编辑器用途或不需要与编辑器撤消历史集成的插件,请改用UndoRedo

管理器的API大多与UndoRedo中相同,因此您可以参考其文档以获取更多示例。主要区别在于EditorUndoRedoManager使用对象+方法名称进行操作,而不是Callable

方法

void

add_do_method(object: Object, method: StringName, ...) vararg

void

add_do_property(object: Object, property: StringName, value: Variant)

void

add_do_reference(object: Object)

void

add_undo_method(object: Object, method: StringName, ...) vararg

void

add_undo_property(object: Object, property: StringName, value: Variant)

void

add_undo_reference(object: Object)

void

clear_history(id: int = -99, increase_version: bool = true)

void

commit_action(execute: bool = true)

void

create_action(name: String, merge_mode: MergeMode = 0, custom_context: Object = null, backward_undo_ops: bool = false)

void

force_fixed_history()

UndoRedo

get_history_undo_redo(id: int) const

int

get_object_history_id(object: Object) const

bool

is_committing_action() const


信号

history_changed() 🔗

当任何历史记录中的操作列表发生更改时发出,无论是在提交操作还是清除历史记录时。


version_changed() 🔗

当任何历史记录的版本因撤消或重做调用而更改时发出。


枚举

enum SpecialHistory: 🔗

SpecialHistory GLOBAL_HISTORY = 0

全球历史与任何场景无关,但与外部资源等有关。

SpecialHistory REMOTE_HISTORY = -9

与远程检查器关联的历史记录。实时编辑正在运行的项目时使用。

SpecialHistory INVALID_HISTORY = -99

无效的“空”历史记录。它是一个特殊值,不与任何对象关联。


方法说明

void add_do_method(object: Object, method: StringName, ...) vararg 🔗

注册一个将在提交操作时调用的方法(即“do”操作)。

如果这是第一个操作,object将用于推断目标撤消历史。


void add_do_property(object: Object, property: StringName, value: Variant) 🔗

为“do”注册属性值更改。

如果这是第一个操作,object将用于推断目标撤消历史。


void add_do_reference(object: Object) 🔗

为“do”注册一个引用,如果“do”历史记录丢失,该引用将被删除。这主要适用于为“do”调用创建的新节点。不要用于资源。


void add_undo_method(object: Object, method: StringName, ...) vararg 🔗

注册一个将在操作撤消时调用的方法(即“撤消”操作)。

如果这是第一个操作,object将用于推断目标撤消历史。


void add_undo_property(object: Object, property: StringName, value: Variant) 🔗

为“撤消”注册属性值更改。

如果这是第一个操作,object将用于推断目标撤消历史。


void add_undo_reference(object: Object) 🔗

为“撤消”注册一个引用,如果“撤消”历史记录丢失,该引用将被删除。这主要适用于使用“do”调用(而不是“undo”调用!)删除的节点。


void clear_history(id: int = -99, increase_version: bool = true) 🔗

清除给定的撤销历史记录。您可以清除特定场景的历史记录、全局历史记录,或者一次性清除所有场景的历史记录,前提是idINVALID_HISTORY

如果increase_versiontrue,撤销历史版本将被增加,标记为未保存。适用于修改场景但不支持撤销的操作。

var scene_root = EditorInterface.get_edited_scene_root()
var undo_redo = EditorInterface.get_editor_undo_redo()
undo_redo.clear_history(undo_redo.get_object_history_id(scene_root))

注意:如果您想标记已编辑的场景为未保存,但不清除其历史记录,请使用EditorInterface.mark_scene_as_unsaved()


void commit_action(execute: bool = true) 🔗

提交操作。如果executetrue(默认),则在调用此函数时调用/设置所有“do”方法/属性。


void create_action(name: String, merge_mode: MergeMode = 0, custom_context: Object = null, backward_undo_ops: bool = false) 🔗

创建一个新操作。调用后,对add_do_method()add_undo_method()add_do_property()add_undo_property()进行所有调用,然后使用commit_action()提交操作。

合并动作的方式由merge_mode参数决定。有关详细信息,请参阅MergeMode

如果提供了custom_context对象,它将用于推断目标历史(而不是使用第一个操作)。

撤消操作在操作中的排序方式由backward_undo_ops决定。当backward_undo_opsfalse撤消选项时,它们的排序顺序与添加的顺序相同。这意味着要添加的第一个操作将是第一个撤消的操作。


void force_fixed_history() 🔗

强制下一个操作(例如add_do_method())使用动作的历史记录,而不是从对象中猜测。当历史记录无法正确确定时,有时需要这样做,例如对于还没有路径的嵌套资源。

此方法仅应在绝对必要时使用,否则可能会导致无效的历史状态。对于大多数复杂情况,create_action()custom_context参数就足够了。


UndoRedo get_history_undo_redo(id: int) const 🔗

返回与给定历史id关联的UndoRedo对象。

0上面的id映射到打开的场景选项卡(但它与它们的顺序不匹配)。0或更低的id具有特殊含义(参见SpecialHistory)。

最好与get_object_history_id()一起使用。此方法仅在您需要一些更高级的UndoRedo方法时提供(但请记住,直接对UndoRedo对象进行操作可能会影响编辑器的稳定性)。


int get_object_history_id(object: Object) const 🔗

返回从给定object推导出的历史ID。它可以与get_history_undo_redo()一起使用。


bool is_committing_action() const 🔗

如果EditorUndoRedoManager当前正在提交操作,即运行其“do”方法或属性更改,则返回true(参见commit_action())。