Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

EditorUndoRedoManager

继承: Object

管理编辑器中打开场景的撤销历史。

描述

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

用法与 UndoRedo 基本一致。需要创建并提交动作,然后管理器会自动决定这个动作属于哪个场景。场景是根据该动作中第一个操作所使用的对象来推断的。规则如下:

  • 如果该对象为 Node,则使用当前编辑的场景;

  • 如果该对象为内置资源,则使用其路径上的场景;

  • 如果该对象为外部资源或任何其他对象,则使用全局历史。

推断的结果有时并不准确,所以在创建动作时你可以提供自定义的上下文对象。

EditorUndoRedoManager 是为 Godot 编辑器插件使用而设计的。你可以使用 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

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

无效历史“null”。这是一个特殊值,不与任何对象相关联。


方法说明

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

注册一个方法,当动作被提交(即“做”的动作)时将被调用。

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


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

为“做”注册一个属性值变更。

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


void add_do_reference(object: Object) 🔗

为“做”注册一个引用,如果“做”历史丢失,则该引用将被擦除。这主要用于为“做”调用而创建的新节点。请不要用于资源。


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) 🔗

为“撤消”注册一个引用,如果“撤消”历史丢失,则该引用将被擦除。这主要用于通过“做”调用(而不是“撤销”调用!)而移除的节点。


void commit_action(execute: bool = true) 🔗

提交该动作。如果 execute 为真(默认值),则该函数被调用时所有“做”方法/属性将被调用/设置。


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

创建一个新的动作。调用后,请执行所有你需要的 add_do_methodadd_undo_methodadd_do_propertyadd_undo_property 调用,然后再用 commit_action 提交这个动作。

动作的合并方式由 merge_mode 参数决定。详见 MergeMode

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

动作中撤销操作的顺序由 backward_undo_ops 决定。backward_undo_opsfalse 时,撤销选项的顺序和添加顺序一致。也就是说,先添加的操作会先撤销。


void force_fixed_history() 🔗

Forces the next operation (e.g. add_do_method) to use the action's history rather than guessing it from the object. This is sometimes needed when a history can't be correctly determined, like for a nested resource that doesn't have a path yet.

This method should only be used when absolutely necessary, otherwise it might cause invalid history state. For most of complex cases, the custom_context parameter of create_action is sufficient.


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 当前正在提交该动作,即运行其“做”方法或属性更改(请参阅 commit_action)时,则返回 true