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 |
|
get_history_undo_redo(id: int) const |
|
get_object_history_id(object: Object) const |
|
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) 🔗
清除给定的撤销历史记录。您可以清除特定场景的历史记录、全局历史记录,或者一次性清除所有场景的历史记录,前提是id为INVALID_HISTORY。
如果increase_version为true,撤销历史版本将被增加,标记为未保存。适用于修改场景但不支持撤销的操作。
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) 🔗
提交操作。如果execute是true(默认),则在调用此函数时调用/设置所有“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_ops为false撤消选项时,它们的排序顺序与添加的顺序相同。这意味着要添加的第一个操作将是第一个撤消的操作。
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())。