EditorPlugin

继承: Node < Object

由编辑器使用,用于扩展其功能。

描述

编辑器使用插件来扩展功能。最常见的插件类型是编辑给定的节点或资源类型的插件、导入插件和导出插件。另见 EditorScript,能够向编辑器添加功能。

注意:这个类中的部分名称中包含“left”和“right”(例如 DOCK_SLOT_LEFT_UL)。这些 API 假设的是从左至右的布局,使用从右至左布局时是反的。保留这些名称是出于兼容的原因。

教程

方法

void

_apply_changes() virtual

bool

_build() virtual

void

_clear() virtual

void

_disable_plugin() virtual

void

_edit(object: Object) virtual

void

_enable_plugin() virtual

void

_forward_3d_draw_over_viewport(viewport_control: Control) virtual

void

_forward_3d_force_draw_over_viewport(viewport_control: Control) virtual

int

_forward_3d_gui_input(viewport_camera: Camera3D, event: InputEvent) virtual

void

_forward_canvas_draw_over_viewport(viewport_control: Control) virtual

void

_forward_canvas_force_draw_over_viewport(viewport_control: Control) virtual

bool

_forward_canvas_gui_input(event: InputEvent) virtual

PackedStringArray

_get_breakpoints() virtual const

Texture2D

_get_plugin_icon() virtual const

String

_get_plugin_name() virtual const

Dictionary

_get_state() virtual const

String

_get_unsaved_status(for_scene: String) virtual const

void

_get_window_layout(configuration: ConfigFile) virtual

bool

_handles(object: Object) virtual const

bool

_has_main_screen() virtual const

void

_make_visible(visible: bool) virtual

void

_save_external_data() virtual

void

_set_state(state: Dictionary) virtual

void

_set_window_layout(configuration: ConfigFile) virtual

void

add_autoload_singleton(name: String, path: String)

Button

add_control_to_bottom_panel(control: Control, title: String, shortcut: Shortcut = null)

void

add_control_to_container(container: CustomControlContainer, control: Control)

void

add_control_to_dock(slot: DockSlot, control: Control, shortcut: Shortcut = null)

void

add_custom_type(type: String, base: String, script: Script, icon: Texture2D)

void

add_debugger_plugin(script: EditorDebuggerPlugin)

void

add_export_plugin(plugin: EditorExportPlugin)

void

add_import_plugin(importer: EditorImportPlugin, first_priority: bool = false)

void

add_inspector_plugin(plugin: EditorInspectorPlugin)

void

add_node_3d_gizmo_plugin(plugin: EditorNode3DGizmoPlugin)

void

add_resource_conversion_plugin(plugin: EditorResourceConversionPlugin)

void

add_scene_format_importer_plugin(scene_format_importer: EditorSceneFormatImporter, first_priority: bool = false)

void

add_scene_post_import_plugin(scene_import_plugin: EditorScenePostImportPlugin, first_priority: bool = false)

void

add_tool_menu_item(name: String, callable: Callable)

void

add_tool_submenu_item(name: String, submenu: PopupMenu)

void

add_translation_parser_plugin(parser: EditorTranslationParserPlugin)

void

add_undo_redo_inspector_hook_callback(callable: Callable)

EditorInterface

get_editor_interface()

PopupMenu

get_export_as_menu()

String

get_plugin_version() const

ScriptCreateDialog

get_script_create_dialog()

EditorUndoRedoManager

get_undo_redo()

void

hide_bottom_panel()

void

make_bottom_panel_item_visible(item: Control)

void

queue_save_layout()

void

remove_autoload_singleton(name: String)

void

remove_control_from_bottom_panel(control: Control)

void

remove_control_from_container(container: CustomControlContainer, control: Control)

void

remove_control_from_docks(control: Control)

void

remove_custom_type(type: String)

void

remove_debugger_plugin(script: EditorDebuggerPlugin)

void

remove_export_plugin(plugin: EditorExportPlugin)

void

remove_import_plugin(importer: EditorImportPlugin)

void

remove_inspector_plugin(plugin: EditorInspectorPlugin)

void

remove_node_3d_gizmo_plugin(plugin: EditorNode3DGizmoPlugin)

void

remove_resource_conversion_plugin(plugin: EditorResourceConversionPlugin)

void

remove_scene_format_importer_plugin(scene_format_importer: EditorSceneFormatImporter)

void

remove_scene_post_import_plugin(scene_import_plugin: EditorScenePostImportPlugin)

void

remove_tool_menu_item(name: String)

void

remove_translation_parser_plugin(parser: EditorTranslationParserPlugin)

void

remove_undo_redo_inspector_hook_callback(callable: Callable)

void

set_dock_tab_icon(control: Control, icon: Texture2D)

void

set_force_draw_over_forwarding_enabled()

void

set_input_event_forwarding_always_enabled()

int

update_overlays() const


信号

main_screen_changed(screen_name: String) 🔗

当用户改变工作空间(2D3DScriptAssetLib)时发出。也适用于由插件定义的自定义屏幕。


project_settings_changed() 🔗

已弃用: Use ProjectSettings.settings_changed instead.

当任意项目设置发生改变时触发。


resource_saved(resource: Resource) 🔗

给定的资源 resource 保存到磁盘时发出。另见 scene_saved


scene_changed(scene_root: Node) 🔗

在编辑器中更改场景时发出。该参数将返回刚刚变为活动状态的场景的根节点。如果此场景是新场景且为空,则参数将为 null


scene_closed(filepath: String) 🔗

当用户关闭场景时发出。参数是被关闭的场景的文件路径。


scene_saved(filepath: String) 🔗

当场景被保存在磁盘上时发出。参数是被保存的场景的文件路径。另见 resource_saved


枚举

enum CustomControlContainer: 🔗

CustomControlContainer CONTAINER_TOOLBAR = 0

主编辑器的工具栏,旁边是运行按钮。

CustomControlContainer CONTAINER_SPATIAL_EDITOR_MENU = 1

3D 编辑器处于活动状态时出现的工具栏。

CustomControlContainer CONTAINER_SPATIAL_EDITOR_SIDE_LEFT = 2

3D 编辑器的左侧边栏。

CustomControlContainer CONTAINER_SPATIAL_EDITOR_SIDE_RIGHT = 3

3D 编辑器的右侧边栏。

CustomControlContainer CONTAINER_SPATIAL_EDITOR_BOTTOM = 4

3D 编辑器的底部面板。

CustomControlContainer CONTAINER_CANVAS_EDITOR_MENU = 5

2D 编辑器处于活动状态时出现的工具条。

CustomControlContainer CONTAINER_CANVAS_EDITOR_SIDE_LEFT = 6

2D 编辑器的左侧边栏。

CustomControlContainer CONTAINER_CANVAS_EDITOR_SIDE_RIGHT = 7

2D 编辑器的右侧边栏。

CustomControlContainer CONTAINER_CANVAS_EDITOR_BOTTOM = 8

2D 编辑器的底部面板。

CustomControlContainer CONTAINER_INSPECTOR_BOTTOM = 9

检查器的底部。

CustomControlContainer CONTAINER_PROJECT_SETTING_TAB_LEFT = 10

项目设置对话框中的选项卡,在其他选项卡的左侧。

CustomControlContainer CONTAINER_PROJECT_SETTING_TAB_RIGHT = 11

项目设置对话框中的选项卡,在其他选项卡的右侧。


enum DockSlot: 🔗

DockSlot DOCK_SLOT_LEFT_UL = 0

左侧停靠槽的左上(默认布局中为空)。

DockSlot DOCK_SLOT_LEFT_BL = 1

左侧停靠槽的左下(默认布局中为空)。

DockSlot DOCK_SLOT_LEFT_UR = 2

左侧停靠槽的右上(默认布局中为“场景”和“导入”面板)。

DockSlot DOCK_SLOT_LEFT_BR = 3

左侧停靠槽的右下(默认布局中为“文件系统”面板)。

DockSlot DOCK_SLOT_RIGHT_UL = 4

右侧停靠槽的左上(默认布局中为“检查器”“节点”以及“历史”面板)。

DockSlot DOCK_SLOT_RIGHT_BL = 5

右侧停靠槽的左下(默认布局中为空)。

DockSlot DOCK_SLOT_RIGHT_UR = 6

右侧停靠槽的右上(默认布局中为空)。

DockSlot DOCK_SLOT_RIGHT_BR = 7

右侧停靠槽的右下(默认布局中为空)。

DockSlot DOCK_SLOT_MAX = 8

代表 DockSlot 枚举的大小。


enum AfterGUIInput: 🔗

AfterGUIInput AFTER_GUI_INPUT_PASS = 0

将该 InputEvent 转发给其他 EditorPlugin。

AfterGUIInput AFTER_GUI_INPUT_STOP = 1

阻止该 InputEvent 到达其他 Editor 类。

AfterGUIInput AFTER_GUI_INPUT_CUSTOM = 2

将该 InputEvent 传递给除主 Node3D 插件之外的其他编辑器插件。这可用于防止节点选择更改并且改为使用子小工具。


方法说明

void _apply_changes() virtual 🔗

当编辑器将要进行保存项目、切换选项卡等操作时,将调用该方法。它要求插件应用所有暂挂的状态更改以确保一致性。

例如,在着色器编辑器中使用它来使插件将用户编写的着色代码应用于对象。


bool _build() virtual 🔗

该方法在编辑器即将运行项目时被调用。这样,插件可以在项目运行之前,执行所需的操作。

该方法必须返回一个布尔值。如果该方法返回 false,则项目将不会运行。运行会立即中止,因此这也会阻止运行所有其他插件的 _build 方法。


void _clear() virtual 🔗

清除所有状态,并将正在编辑的对象重置为零。这可确保你的插件不会继续编辑当前存在的节点或来自错误场景的节点。


void _disable_plugin() virtual 🔗

当用户在项目设置窗口的插件选项卡中禁用 EditorPlugin 时,由引擎调用。


void _edit(object: Object) virtual 🔗

该函数用于编辑特定对象类型(节点或资源)的插件。它请求编辑器编辑给定的对象。

如果该插件刚刚正在编辑一个对象,且它不想再处理任何选定的对象,则 object 可以为 null。这可用于清理编辑状态。


void _enable_plugin() virtual 🔗

当用户在项目设置窗口的插件选项卡中启用该 EditorPlugin 时,由引擎调用。


void _forward_3d_draw_over_viewport(viewport_control: Control) virtual 🔗

当 3D 编辑器的视口更新时由引擎调用。将 overlay Control 用于绘制。可以通过调用 update_overlays 手动更新该视口。

GDScriptC#

  1. func _forward_3d_draw_over_viewport(overlay):
  2. # 在光标位置画一个圆。
  3. overlay.draw_circle(overlay.get_local_mouse_position(), 64)
  4. func _forward_3d_gui_input(camera, event):
  5. if event is InputEventMouseMotion:
  6. # 当光标被移动时,重绘视口。
  7. update_overlays()
  8. return EditorPlugin.AFTER_GUI_INPUT_STOP
  9. return EditorPlugin.AFTER_GUI_INPUT_PASS
  1. public override void _Forward3DDrawOverViewport(Control viewportControl)
  2. {
  3. // 在光标位置画一个圆。
  4. viewportControl.DrawCircle(viewportControl.GetLocalMousePosition(), 64, Colors.White);
  5. }
  6. public override EditorPlugin.AfterGuiInput _Forward3DGuiInput(Camera3D viewportCamera, InputEvent @event)
  7. {
  8. if (@event is InputEventMouseMotion)
  9. {
  10. // 当光标被移动时,重绘视口。
  11. UpdateOverlays();
  12. return EditorPlugin.AfterGuiInput.Stop;
  13. }
  14. return EditorPlugin.AfterGuiInput.Pass;
  15. }

void _forward_3d_force_draw_over_viewport(viewport_control: Control) virtual 🔗

该方法与 _forward_3d_draw_over_viewport 相同,只是它绘制在所有内容之上。当需要一个显示在其他任何内容之上的额外图层时很有用。

需要使用 set_force_draw_over_forwarding_enabled 来启用该方法的调用。


int _forward_3d_gui_input(viewport_camera: Camera3D, event: InputEvent) virtual 🔗

在当前编辑的场景中有根节点时调用,实现 _handles 并在 3D 视口中产生 InputEvent。返回值决定 InputEvent 是被消费还是被转发给其他 EditorPlugin。有关选项,请参阅 AfterGUIInput

示例:

GDScriptC#

  1. # 阻止 InputEvent 到达其他编辑类。
  2. func _forward_3d_gui_input(camera, event):
  3. return EditorPlugin.AFTER_GUI_INPUT_STOP
  1. // 阻止 InputEvent 到达其他编辑类。
  2. public override EditorPlugin.AfterGuiInput _Forward3DGuiInput(Camera3D camera, InputEvent @event)
  3. {
  4. return EditorPlugin.AfterGuiInput.Stop;
  5. }

必须为 return EditorPlugin.AFTER_GUI_INPUT_PASS 以便将 InputEvent 转发给其他编辑器类。

示例:

GDScriptC#

  1. # 消耗 InputEventMouseMotion 并转发其他 InputEvent 类型。
  2. func _forward_3d_gui_input(camera, event):
  3. return EditorPlugin.AFTER_GUI_INPUT_STOP if event is InputEventMouseMotion else EditorPlugin.AFTER_GUI_INPUT_PASS
  1. // 消耗 InputEventMouseMotion 并转发其他 InputEvent 类型。
  2. public override EditorPlugin.AfterGuiInput _Forward3DGuiInput(Camera3D camera, InputEvent @event)
  3. {
  4. return @event is InputEventMouseMotion ? EditorPlugin.AfterGuiInput.Stop : EditorPlugin.AfterGuiInput.Pass;
  5. }

void _forward_canvas_draw_over_viewport(viewport_control: Control) virtual 🔗

当 2D 编辑器的视口更新时由引擎调用。将 overlay Control 用于绘制。可以通过调用 update_overlays 手动更新该视口。

GDScriptC#

  1. func _forward_canvas_draw_over_viewport(overlay):
  2. # 在光标位置画一个圆。
  3. overlay.draw_circle(overlay.get_local_mouse_position(), 64, Color.WHITE)
  4. func _forward_canvas_gui_input(event):
  5. if event is InputEventMouseMotion:
  6. # 当光标被移动时,重绘视口。
  7. update_overlays()
  8. return true
  9. return false
  1. public override void _ForwardCanvasDrawOverViewport(Control viewportControl)
  2. {
  3. // 在光标位置画一个圆。
  4. viewportControl.DrawCircle(viewportControl.GetLocalMousePosition(), 64, Colors.White);
  5. }
  6. public override bool _ForwardCanvasGuiInput(InputEvent @event)
  7. {
  8. if (@event is InputEventMouseMotion)
  9. {
  10. // 当光标被移动时,重绘视口。
  11. UpdateOverlays();
  12. return true;
  13. }
  14. return false;
  15. }

void _forward_canvas_force_draw_over_viewport(viewport_control: Control) virtual 🔗

该方法与 _forward_canvas_draw_over_viewport 相同,只是它绘制在所有内容之上。当需要一个显示在其他任何内容之上的额外图层时很有用。

需要使用 set_force_draw_over_forwarding_enabled 来启用该方法的调用。


bool _forward_canvas_gui_input(event: InputEvent) virtual 🔗

在当前编辑的场景中有根节点时调用,实现 _handles 并在 2D 视口中产生 InputEvent。如果 return true EditorPlugin 消耗 event,则拦截该 InputEvent;否则将 event 转发给其他编辑器类。

示例:

GDScriptC#

  1. # 阻止 InputEvent 到达其他编辑类。
  2. func _forward_canvas_gui_input(event):
  3. return true
  1. // 阻止 InputEvent 到达其他编辑类。
  2. public override bool ForwardCanvasGuiInput(InputEvent @event)
  3. {
  4. return true;
  5. }

必须 return false 才能将 InputEvent 转发到其他编辑器类。

示例:

GDScriptC#

  1. # 消耗 InputEventMouseMotion 并转发其他 InputEvent 类型。
  2. func _forward_canvas_gui_input(event):
  3. if (event is InputEventMouseMotion):
  4. return true
  5. return false
  1. // 消耗 InputEventMouseMotion 并转发其他 InputEvent 类型。
  2. public override bool _ForwardCanvasGuiInput(InputEvent @event)
  3. {
  4. if (@event is InputEventMouseMotion)
  5. {
  6. return true;
  7. }
  8. return false;
  9. }

PackedStringArray _get_breakpoints() virtual const 🔗

该函数用于编辑基于脚本的对象的编辑器。可以返回格式为(script:line)的断点的列表,例如:res://path_to_script.gd:25


Texture2D _get_plugin_icon() virtual const 🔗

在插件中覆盖该方法,以返回一个 Texture2D 以便为插件提供一个图标。

对于主界面插件,它出现在屏幕顶部,“2D”、“3D”、“脚本”和 “AssetLib” 按钮的右侧。

理想情况下,插件图标应为透明背景的白色,大小为 16×16 像素。

GDScriptC#

  1. func _get_plugin_icon():
  2. # 你可以使用一个自定义的图标:
  3. return preload("res://addons/my_plugin/my_plugin_icon.svg")
  4. # 或者使用一个内置的图标:
  5. return EditorInterface.get_editor_theme().get_icon("Node", "EditorIcons")
  1. public override Texture2D _GetPluginIcon()
  2. {
  3. // 你可以使用一个自定义的图标:
  4. return ResourceLoader.Load<Texture2D>("res://addons/my_plugin/my_plugin_icon.svg");
  5. // 或者使用一个内置的图标:
  6. return EditorInterface.Singleton.GetEditorTheme().GetIcon("Node", "EditorIcons");
  7. }

String _get_plugin_name() virtual const 🔗

在插件中覆盖该方法,以在 Godot 编辑器中显示时提供该插件的名称。

对于主屏幕插件,它显示在屏幕顶部,在“2D”“3D”“脚本”“AssetLib”按钮的右侧。


Dictionary _get_state() virtual const 🔗

覆盖该方法,以提供要保存的状态数据,如视图位置、网格设置、折叠等。这可用于保存场景(再次打开时,保持状态)和切换选项卡( 选项卡返回时,可以恢复状态)。每个场景的数据会自动被保存在编辑器元数据文件夹中的 editstate 文件中。如果想为插件存储全局的(独立于场景的)编辑器数据,可以改用 _get_window_layout

使用 _set_state 恢复保存的状态。

注意:此方法不应该用于保存应随项目保留的重要设置。

注意:必须实现 _get_plugin_name,才能正确存储和恢复状态。

  1. func _get_state():
  2. var state = {"zoom": zoom, "preferred_color": my_color}
  3. return state

String _get_unsaved_status(for_scene: String) virtual const 🔗

覆盖该方法以提供列出未保存更改的自定义消息。编辑器将在退出或关闭场景时调用该方法,并在确认对话框中显示返回的字符串。如果该插件没有未保存的更改,则返回空字符串。

关闭场景时,for_scene 是正在关闭的场景的路径。你可以使用它来处理该场景中的内置资源。

如果用户确认保存,将在关闭编辑器之前将调用 _save_external_data

  1. func _get_unsaved_status(for_scene):
  2. if not unsaved:
  3. return ""
  4. if for_scene.is_empty():
  5. return "Save changes in MyCustomPlugin before closing?"
  6. else:
  7. return "Scene %s has changes from MyCustomPlugin. Save before closing?" % for_scene.get_file()
  8. func _save_external_data():
  9. unsaved = false

如果该插件没有特定于场景的更改,则可以在关闭场景时忽略这些调用:

  1. func _get_unsaved_status(for_scene):
  2. if not for_scene.is_empty():
  3. return ""

void _get_window_layout(configuration: ConfigFile) virtual 🔗

覆盖该方法,以提供该插件的 GUI 布局、或想要存储的任何其他数据。这用于在调用 queue_save_layout 或更改编辑器布局(例如更改停靠面板的位置)时,保存项目的编辑器布局。数据被存储在编辑器元数据目录中的 editor_layout.cfg 文件中。

使用 _set_window_layout 恢复保存的布局。

  1. func _get_window_layout(configuration):
  2. configuration.set_value("MyPlugin", "window_position", $Window.position)
  3. configuration.set_value("MyPlugin", "icon_color", $Icon.modulate)

bool _handles(object: Object) virtual const 🔗

如果插件会编辑特定类型的对象(资源或节点),则请实现该函数。如果返回 true,则将在编辑器请求时,调用函数 _edit_make_visible。如果已经声明了方法 _forward_canvas_gui_input_forward_3d_gui_input,则它们也会被调用。

注意:每个插件一次只应处理一种类型的对象。如果一个插件处理多种类型的对象并且同时编辑这些对象,则会导致错误。


bool _has_main_screen() virtual const 🔗

如果这是一个主屏幕编辑器插件,则返回 true(它与 2D3DScriptAssetLib 一起进入工作区选择器)。

当该插件的工作区被选中时,其他主屏幕插件将被隐藏,但你的插件不会自动出现。它需要被添加为 EditorInterface.get_editor_main_screen 的子节点,并在 _make_visible 中使其可见。

使用 _get_plugin_name_get_plugin_icon 自定义插件按钮的外观。

  1. var plugin_control
  2. func _enter_tree():
  3. plugin_control = preload("my_plugin_control.tscn").instantiate()
  4. EditorInterface.get_editor_main_screen().add_child(plugin_control)
  5. plugin_control.hide()
  6. func _has_main_screen():
  7. return true
  8. func _make_visible(visible):
  9. plugin_control.visible = visible
  10. func _get_plugin_name():
  11. return "My Super Cool Plugin 3000"
  12. func _get_plugin_icon():
  13. return EditorInterface.get_editor_theme().get_icon("Node", "EditorIcons")

void _make_visible(visible: bool) virtual 🔗

当编辑器被要求变为可见时,该函数将被调用。它用于编辑特定对象类型的插件。

请记住,你必须手动管理所有编辑器控件的可见性。


void _save_external_data() virtual 🔗

这个方法在编辑器保存项目后或关闭项目时被调用,它要求插件保存编辑的外部场景/资源。


void _set_state(state: Dictionary) virtual 🔗

恢复用 _get_state 保存的状态。这个方法会在编辑器的当前场景选项卡发生改变时调用。

注意:你的插件必须实现 _get_plugin_name,否则无法被识别,这个方法也不会被调用。

  1. func _set_state(data):
  2. zoom = data.get("zoom", 1.0)
  3. preferred_color = data.get("my_color", Color.WHITE)

void _set_window_layout(configuration: ConfigFile) virtual 🔗

恢复用 _get_window_layout 保存的插件 GUI 布局和数据。编辑器启动时会调用每个插件的这个方法。请使用提供的 configuration 文件读取你保存的数据。

  1. func _set_window_layout(configuration):
  2. $Window.position = configuration.get_value("MyPlugin", "window_position", Vector2())
  3. $Icon.modulate = configuration.get_value("MyPlugin", "icon_color", Color.WHITE)

void add_autoload_singleton(name: String, path: String) 🔗

path 处的脚本作为 name 添加到自动加载列表中。


Button add_control_to_bottom_panel(control: Control, title: String, shortcut: Shortcut = null) 🔗

将控件添加到底部面板(与“输出”“调试”“动画”等一起)。返回添加的按钮。你需要视情况自行隐藏/显示这个按钮。停用插件时,请确保使用 remove_control_from_bottom_panel 移除自定义控件并使用 Node.queue_free 将其释放。

你还可以指定快捷键参数。按下快捷键时会切换底部面板的可见性。示例见“编辑器设置”中的默认编辑器底部面板快捷键。按照惯例都使用了 Alt 修饰键。


void add_control_to_container(container: CustomControlContainer, control: Control) 🔗

将自定义控件添加到容器中(见 CustomControlContainer)。在编辑器用户界面中,有许多位置可以添加自定义控件。

请记住,必须自己管理你的自定义控件的可见性(并且很可能在添加后隐藏它)。

当插件被停用时,请确保使用 remove_control_from_container 移除自定义控件,并使用 Node.queue_free 将其释放。


void add_control_to_dock(slot: DockSlot, control: Control, shortcut: Shortcut = null) 🔗

将控件添加到特定的停靠槽位(选项见 DockSlot)。

如果重新放置了停靠面板,并且只要该插件处于活动状态,编辑器就会在以后的会话中保存停靠面板的位置。

停用插件后,请确保使用 remove_control_from_docks 移除自定义控件,并使用 Node.queue_free 将其释放。

你还可以指定快捷键参数。如果停靠面板位于底部面板,那么按下该快捷键就会切换面板的可见性(否则快捷键不会影响面板)。示例见“编辑器设置”中的默认编辑器底部面板快捷键。按照惯例都使用了 Alt 修饰键。


void add_custom_type(type: String, base: String, script: Script, icon: Texture2D) 🔗

Adds a custom type, which will appear in the list of nodes or resources.

When a given node or resource is selected, the base type will be instantiated (e.g. “Node3D”, “Control”, “Resource”), then the script will be loaded and set to this object.

Note: The base type is the base engine class which this type’s class hierarchy inherits, not any custom type parent classes.

You can use the virtual method _handles to check if your custom object is being edited by checking the script or using the is keyword.

During run-time, this will be a simple object with a script so this function does not need to be called then.

Note: Custom types added this way are not true classes. They are just a helper to create a node with specific script.


void add_debugger_plugin(script: EditorDebuggerPlugin) 🔗

将一个 Script 作为调试器插件添加到调试器。该脚本必须扩展 EditorDebuggerPlugin


void add_export_plugin(plugin: EditorExportPlugin) 🔗

注册一个新的 EditorExportPlugin。导出插件是用来在项目被导出时执行任务的。

有关如何注册插件的示例,请参见 add_inspector_plugin


void add_import_plugin(importer: EditorImportPlugin, first_priority: bool = false) 🔗

注册一个新的 EditorImportPlugin。导入插件用于将自定义的和不受支持的资产,作为一种自定义 Resource 类型导入。

如果 first_prioritytrue,则该新的导入插件被首先插入列表中,并优先于预先存在的插件。

注意:如果要导入自定义 3D 资产格式,请改用 add_scene_format_importer_plugin

有关如何注册插件的示例,请参见 add_inspector_plugin


void add_inspector_plugin(plugin: EditorInspectorPlugin) 🔗

注册一个新的 EditorInspectorPlugin。检查器插件用于扩展 EditorInspector,并为对象的属性提供自定义配置工具。

注意:EditorPlugin 被禁用时,请始终使用 remove_inspector_plugin 移除已注册的 EditorInspectorPlugin,以防止泄漏和意外行为。

GDScript

  1. const MyInspectorPlugin = preload("res://addons/your_addon/path/to/your/script.gd")
  2. var inspector_plugin = MyInspectorPlugin.new()
  3. func _enter_tree():
  4. add_inspector_plugin(inspector_plugin)
  5. func _exit_tree():
  6. remove_inspector_plugin(inspector_plugin)

void add_node_3d_gizmo_plugin(plugin: EditorNode3DGizmoPlugin) 🔗

注册一个新的 EditorNode3DGizmoPlugin。小工具插件用于将自定义小工具添加到 Node3D 的 3D 预览视图。

有关如何注册插件的示例,请参阅 add_inspector_plugin


void add_resource_conversion_plugin(plugin: EditorResourceConversionPlugin) 🔗

注册一个新的 EditorResourceConversionPlugin。资源转换插件用于将自定义资源转换器添加到编辑器检查器。

有关如何创建资源转换插件的示例,请参阅 EditorResourceConversionPlugin


void add_scene_format_importer_plugin(scene_format_importer: EditorSceneFormatImporter, first_priority: bool = false) 🔗

注册一个新的 EditorSceneFormatImporter。场景导入器用于将自定义格式的 3D 资产导入为场景。

如果 first_prioritytrue,则这个新的导入插件会被插入到列表的首位,优先于预先存在的插件。


void add_scene_post_import_plugin(scene_import_plugin: EditorScenePostImportPlugin, first_priority: bool = false) 🔗

添加 EditorScenePostImportPlugin。这些插件能够在导入对话框中添加新的选项,自定义 3D 资产的导入过程。

如果 first_prioritytrue,则这个新的导入插件会被插入到列表的首位,优先于预先存在的插件。


void add_tool_menu_item(name: String, callable: Callable) 🔗

项目 > 工具中添加名为 name 的自定义菜单项。点击时会调用所提供的 callable


void add_tool_submenu_item(name: String, submenu: PopupMenu) 🔗

项目 > 工具中添加名为 name 的自定义 PopupMenu 子菜单。请在清理插件时调用 remove_tool_menu_item 移除该菜单。


void add_translation_parser_plugin(parser: EditorTranslationParserPlugin) 🔗

注册一个自定义翻译解析器插件,用于从自定义文件中提取可翻译的字符串。


void add_undo_redo_inspector_hook_callback(callable: Callable) 🔗

当在检查器中修改属性时,将一个回调函数挂钩到撤消/重做动作创建中。例如,这允许保存在修改给定属性时可能丢失的其他属性。

该回调函数应该有 4 个参数:Object undo_redoObject modified_objectString propertyVariant new_value。它们分别是检查器使用的 UndoRedo 对象、当前修改的对象、修改的属性的名称和该属性即将采用的新值。


EditorInterface get_editor_interface() 🔗

已弃用: EditorInterface is a global singleton and can be accessed directly by its name.

返回 EditorInterface 单例实例。


PopupMenu get_export_as_menu() 🔗

返回场景 > 另存为…下的 PopupMenu


String get_plugin_version() const 🔗

提供在 plugin.cfg 配置文件中声明的插件版本。


ScriptCreateDialog get_script_create_dialog() 🔗

获取用于创建脚本的编辑器对话框。

注意:用户可以在使用前对其进行配置。

警告:移除和释放这个节点将使编辑器的一部分失去作用,并可能导致崩溃。


EditorUndoRedoManager get_undo_redo() 🔗

获取撤消/重做对象。编辑器中的大多数操作都是可以撤消的,因此请使用此对象来确保在需要时执行此操作。


void hide_bottom_panel() 🔗

最小化底部面板。


void make_bottom_panel_item_visible(item: Control) 🔗

使底部面板中的一个特定项目可见。


void queue_save_layout() 🔗

排队保存游戏项目的编辑器布局。


void remove_autoload_singleton(name: String) 🔗

从列表中移除自动加载 name


void remove_control_from_bottom_panel(control: Control) 🔗

从底部面板上移除该控件。必须手动调用 Node.queue_free 释放该控件。


void remove_control_from_container(container: CustomControlContainer, control: Control) 🔗

从指定的容器中移除该控件。必须手动调用 Node.queue_free 释放该控件。


void remove_control_from_docks(control: Control) 🔗

从停靠面板中移除该控件。必须手动调用 Node.queue_free 释放该控件。


void remove_custom_type(type: String) 🔗

移除由 add_custom_type 添加的自定义类型。


void remove_debugger_plugin(script: EditorDebuggerPlugin) 🔗

从调试器中移除带有给定脚本的调试器插件。


void remove_export_plugin(plugin: EditorExportPlugin) 🔗

移除由 add_export_plugin 注册的导出插件。


void remove_import_plugin(importer: EditorImportPlugin) 🔗

移除由 add_import_plugin 注册的导入插件。


void remove_inspector_plugin(plugin: EditorInspectorPlugin) 🔗

移除由 add_import_plugin 注册的检查器插件


void remove_node_3d_gizmo_plugin(plugin: EditorNode3DGizmoPlugin) 🔗

移除由 add_node_3d_gizmo_plugin 注册的小工具插件。


void remove_resource_conversion_plugin(plugin: EditorResourceConversionPlugin) 🔗

移除由 add_resource_conversion_plugin 注册的资源转换插件。


void remove_scene_format_importer_plugin(scene_format_importer: EditorSceneFormatImporter) 🔗

移除由 add_scene_format_importer_plugin 注册的场景格式导入器插件。


void remove_scene_post_import_plugin(scene_import_plugin: EditorScenePostImportPlugin) 🔗

移除由 add_scene_post_import_plugin 注册的 EditorScenePostImportPlugin


void remove_tool_menu_item(name: String) 🔗

项目 > 工具中移除名为 name 的菜单。


void remove_translation_parser_plugin(parser: EditorTranslationParserPlugin) 🔗

移除由 add_translation_parser_plugin 注册的自定义翻译解析器插件。


void remove_undo_redo_inspector_hook_callback(callable: Callable) 🔗

移除由 add_undo_redo_inspector_hook_callback 添加的回调。


void set_dock_tab_icon(control: Control, icon: Texture2D) 🔗

设置停靠面板插槽中给定控件的选项卡图标。设置为 null 会移除该图标。


void set_force_draw_over_forwarding_enabled() 🔗

更新视口时,为 2D 编辑器启用 _forward_canvas_force_draw_over_viewport 的调用,为 3D 编辑器启用 _forward_3d_force_draw_over_viewport 的调用。只需调用该方法一次,它将永久适用于该插件。


void set_input_event_forwarding_always_enabled() 🔗

如果始终希望从 3D 视图屏幕在 _forward_3d_gui_input 中接收输入,请使用该方法。如果插件想要在场景中使用射线投射,它可能特别有用。


int update_overlays() const 🔗

更新 2D 和 3D 编辑器视口的叠加层。会导致方法 _forward_canvas_draw_over_viewport_forward_canvas_force_draw_over_viewport_forward_3d_draw_over_viewport_forward_3d_force_draw_over_viewport 被调用。