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.

EditorContextMenuPlugin

继承: RefCounted < Object

用于在编辑器中添加自定义上下文菜单的插件。

描述

EditorContextMenuPlugin 能够在编辑器的上下文菜单中添加自定义的选项。

目前支持三个常用区域的上下文菜单:文件系统、场景树、编辑器脚本列表面板。

方法

void

_popup_menu(paths: PackedStringArray) virtual

void

add_context_menu_item(name: String, callback: Callable, icon: Texture2D = null)

void

add_context_menu_item_from_shortcut(name: String, shortcut: Shortcut, icon: Texture2D = null)

void

add_context_submenu_item(name: String, menu: PopupMenu, icon: Texture2D = null)

void

add_menu_shortcut(shortcut: Shortcut, callback: Callable)


枚举

enum ContextMenuSlot: 🔗

ContextMenuSlot CONTEXT_SLOT_SCENE_TREE = 0

“场景”面板的上下文菜单。调用 _popup_menu() 时提供的是当前所选节点路径的列表,可选回调接收的是当前所选节点列表。

ContextMenuSlot CONTEXT_SLOT_FILESYSTEM = 1

“文件系统”面板的上下文菜单。调用 _popup_menu() 和可选回调时提供的是当前所选文件路径的列表。

ContextMenuSlot CONTEXT_SLOT_SCRIPT_EDITOR = 2

“脚本”编辑器中脚本选项卡的上下文菜单。调用 _popup_menu() 时提供的是当前编辑脚本的路径,可选回调接收的是该脚本的引用。

ContextMenuSlot CONTEXT_SLOT_FILESYSTEM_CREATE = 3

“文件系统”面板上下文菜单的“创建...”子菜单。调用 _popup_menu() 和可选回调时提供的是当前所选文件路径的列表。

ContextMenuSlot CONTEXT_SLOT_SCRIPT_EDITOR_CODE = 4

“脚本”编辑器中代码编辑器的上下文菜单。调用 _popup_menu() 时提供的是指向 CodeEdit 的路径。你可以使用这段代码获取该节点:

func _popup_menu(paths):
    var code_edit = Engine.get_main_loop().root.get_node(paths[0]);

可选回调接收的是该节点的引用。你可以使用 CodeEdit 的方法执行符号查询等操作。

ContextMenuSlot CONTEXT_SLOT_SCENE_TABS = 5

场景选项卡的上下文菜单。调用 _popup_menu() 时提供的点击场景的路径,在空白区域打开菜单时为空的 PackedStringArray。可选回调接收的是点击场景的路径,未点击场景时为空的 String

ContextMenuSlot CONTEXT_SLOT_2D_EDITOR = 6

2D 编辑器的基本右键菜单。调用 _popup_menu() 时提供的是光标下所有 CanvasItem 的路径。你可以使用这段代码获取这些节点:

func _popup_menu(paths):
    var canvas_item = Engine.get_main_loop().root.get_node(paths[0]); # 将 0 替换为想要的索引。

光标下没有节点时路径数组为空。可选回调接收的是类型为 CanvasItem 节点的类型化数组。


方法说明

void _popup_menu(paths: PackedStringArray) virtual 🔗

创建上下文菜单时调用,可以使用 add_context_menu_item()add_context_menu_item_from_shortcut() 函数添加自定义选项。paths 包含当前选中的路径(取决于菜单),可以借此有选择地添加选项。


void add_context_menu_item(name: String, callback: Callable, icon: Texture2D = null) 🔗

在插件指定槽位的上下文菜单中添加自定义选项。激活该选项时会调用 callback。回调应当接受一个 Array 参数;该数组的内容取决于上下文菜单槽位。

func _popup_menu(paths):
    add_context_menu_item("文件自定义选项", handle, ICON)

如果你想要为菜单项设置快捷键,请改用 add_context_menu_item_from_shortcut()


void add_context_menu_item_from_shortcut(name: String, shortcut: Shortcut, icon: Texture2D = null) 🔗

在插件指定槽位的上下文菜单中添加自定义选项。该选项会设置快捷键 shortcut 并重用其回调。快捷键必须事先用 add_menu_shortcut() 注册。

func _init():
    add_menu_shortcut(SHORTCUT, handle)

func _popup_menu(paths):
    add_context_menu_item_from_shortcut("文件自定义选项", SHORTCUT, ICON)

void add_context_submenu_item(name: String, menu: PopupMenu, icon: Texture2D = null) 🔗

在插件指定槽位的上下文菜单中添加子菜单。子菜单不会自动处理,你需要自行连接信号。另外每次弹出后都会释放子菜单,所以每次都需要提供新的 PopupMenu

func _popup_menu(paths):
    var popup_menu = PopupMenu.new()
    popup_menu.add_item("蓝色")
    popup_menu.add_item("白色")
    popup_menu.id_pressed.connect(_on_color_submenu_option)

    add_context_submenu_item("设置节点颜色", popup_menu)

void add_menu_shortcut(shortcut: Shortcut, callback: Callable) 🔗

为插件的上下文菜单注册快捷键。该方法只应调用一次(例如在插件的 Object._init() 中调用)。当用户按下 shortcut 快捷键且菜单上下文有效时就会调用 callback(例如聚焦“文件系统”面板)。回调应接受一个 Array 参数;数组内容取决于具体的上下文菜单槽位。

func _init():
    add_menu_shortcut(SHORTCUT, handle)