EditorPlugin
继承
简要描述
编辑器用来扩展其功能。
描述
编辑器使用插件来扩展功能。最常见的插件类型是那些编辑给定节点或资源类型,导入插件和导出插件的插件。见EditorScript向编辑器添加功能。
方法
返回值类型 | 方法名称 |
---|---|
void | add_autoload_singleton(name: String, path: String) |
ToolButton | add_control_to_bottom_panel(control: Control, title: String) |
void | add_control_to_container(container: int, control: Control) |
void | add_control_to_dock(slot: int, control: Control) |
void | add_custom_type(type: String, base: String, script: Script, icon: Texture) |
void | add_export_plugin(plugin: EditorExportPlugin) |
void | add_import_plugin(importer: EditorImportPlugin) |
void | add_inspector_plugin(plugin: EditorInspectorPlugin) |
void | add_scene_import_plugin(scene_importer: EditorSceneImporter) |
void | add_spatial_gizmo_plugin(plugin: EditorSpatialGizmoPlugin) |
void | add_tool_menu_item(name: String, handler: Object, callback: String, ud: Variant = null) |
void | add_tool_submenu_item(name: String, submenu: Object) |
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_canvas_draw_over_viewport(overlay: Control) virtual |
void | forward_canvas_force_draw_over_viewport(overlay: Control) virtual |
bool | forward_canvas_gui_input(event: InputEvent) virtual |
bool | forward_spatial_gui_input(camera: Camera, event: InputEvent) virtual |
PoolStringArray | get_breakpoints() virtual |
EditorInterface | get_editor_interface() |
Texture | get_plugin_icon() virtual |
String | get_plugin_name() virtual |
ScriptCreateDialog | get_script_create_dialog() |
Dictionary | get_state() virtual |
UndoRedo | get_undo_redo() |
void | get_window_layout(layout: ConfigFile) virtual |
bool | handles(object: Object) virtual |
bool | has_main_screen() virtual |
void | hide_bottom_panel() |
void | make_bottom_panel_item_visible(item: Control) |
void | make_visible(visible: bool) virtual |
void | queue_save_layout() const |
void | remove_autoload_singleton(name: String) |
void | remove_control_from_bottom_panel(control: Control) |
void | remove_control_from_container(container: int, control: Control) |
void | remove_control_from_docks(control: Control) |
void | remove_custom_type(type: String) |
void | remove_export_plugin(plugin: EditorExportPlugin) |
void | remove_import_plugin(importer: EditorImportPlugin) |
void | remove_inspector_plugin(plugin: EditorInspectorPlugin) |
void | remove_scene_import_plugin(scene_importer: EditorSceneImporter) |
void | remove_spatial_gizmo_plugin(plugin: EditorSpatialGizmoPlugin) |
void | remove_tool_menu_item(name: String) |
void | save_external_data() virtual |
void | set_force_draw_over_forwarding_enabled() |
void | set_input_event_forwarding_always_enabled() |
void | set_state(state: Dictionary) virtual |
void | set_window_layout(layout: ConfigFile) virtual |
int | update_overlays() const |
信号
- **main_screen_changed**
当用户更改工作空间(2D,3D,Script,AssetLib)时发出。也可用于由插件定义的自定义屏幕。
- **resource_saved**
- **scene_changed**
在编辑器中更改场景时发出。该参数将返回刚刚变为活动状态的场景的根节点。如果此场景是新场景且为空,则参数将为null
。
- **scene_closed**
当用户关闭场景时发出。参数是一个封闭场景的文件路径。
枚举
enum CustomControlContainer:
- **CONTAINER_TOOLBAR = 0**
- **CONTAINER_SPATIAL_EDITOR_MENU = 1**
- **CONTAINER_SPATIAL_EDITOR_SIDE_LEFT = 2**
- **CONTAINER_SPATIAL_EDITOR_SIDE_RIGHT = 3**
- **CONTAINER_SPATIAL_EDITOR_BOTTOM = 4**
- **CONTAINER_CANVAS_EDITOR_MENU = 5**
- **CONTAINER_CANVAS_EDITOR_SIDE_LEFT = 6**
- **CONTAINER_CANVAS_EDITOR_SIDE_RIGHT = 7**
- **CONTAINER_CANVAS_EDITOR_BOTTOM = 8**
- **CONTAINER_PROPERTY_EDITOR_BOTTOM = 9**
- **CONTAINER_PROJECT_SETTING_TAB_LEFT = 10**
- **CONTAINER_PROJECT_SETTING_TAB_RIGHT = 11**
enum DockSlot:
- **DOCK_SLOT_LEFT_UL = 0**
- **DOCK_SLOT_LEFT_BL = 1**
- **DOCK_SLOT_LEFT_UR = 2**
- **DOCK_SLOT_LEFT_BR = 3**
- **DOCK_SLOT_RIGHT_UL = 4**
- **DOCK_SLOT_RIGHT_BL = 5**
- **DOCK_SLOT_RIGHT_UR = 6**
- **DOCK_SLOT_RIGHT_BR = 7**
- **DOCK_SLOT_MAX = 8**
表示DockSlot枚举的大小。
方法说明
- add_autoload_singleton add_autoload_singleton(name: String, path: String)
将path
处的脚本以name
名称添加到自动加载列表中。
- add_control_to_bottom_panel add_control_to_bottom_panel(control: Control, title: String)
将控件添加到底部面板(同“输出”,“调试”,“动画”等)。返回对添加的按钮的引用。您可以根据需要隐藏/显示按钮。停用插件后,请确保使用remove_control_from_bottom_panel删除自定义控件,并使用Node.queue_free将其释放。
- add_control_to_container add_control_to_container(container: int, control: Control)
将自定义控件添加到容器(见CustomControlContainer)。在编辑器用户界面中,可以在许多位置添加自定义控件。
请记住,您必须自己管理自定义控件的可见性(并可能在添加后将其隐藏)。
停用插件后,请确保使用remove_control_from_container删除自定义控件,并使用Node.queue_free释放它。
- add_control_to_dock add_control_to_dock(slot: int, control: Control)
将控件添加到指定的面板插槽(有关选项,请参见[枚举DockSlot])。
如果重新放置了基座,并且只要插件处于活动状态,编辑器就会在以后的会话中保存基座的位置。
停用插件后,请确保使用remove_control_from_docks删除自定义控件,并使用Node.queue_free释放它。
- add_custom_type add_custom_type(type: String, base: String, script: Script, icon: Texture)
添加自定义类型,该类型将出现在节点或资源列表中。可以选择传递图标。
选择给定节点或资源时,将实例化基本类型(即“空间”,“控件”,“资源”),然后将脚本加载并设置为此对象。
您可以使用虚拟方法handles通过检查脚本或使用is
关键字来检查是否正在编辑自定义对象。
在运行时,这将是带有脚本的简单对象,因此无需再调用此函数。
- add_export_plugin add_export_plugin(plugin: EditorExportPlugin)
注册一个新的导出插件。在导出项目时使用导出插件。有关更多信息,见EditorExportPlugin。
- add_import_plugin add_import_plugin(importer: EditorImportPlugin)
- add_inspector_plugin add_inspector_plugin(plugin: EditorInspectorPlugin)
- add_scene_import_plugin add_scene_import_plugin(scene_importer: EditorSceneImporter)
- add_spatial_gizmo_plugin add_spatial_gizmo_plugin(plugin: EditorSpatialGizmoPlugin)
- add_tool_menu_item (name: String, handler: Object, callback: String, ud: Variant = null)
以name
名将自定义菜单项添加到Project > Tools,用户激活它时,以ud
为参数调用handler
一个实例上的callback
- add_tool_submenu_item (name: String, submenu: Object)
在Project > Tools >下添加自定义子菜单name
。submenu
应该是类PopupMenu的对象。此子菜单应使用remove_tool_menu_item(name)
清除。
- apply_changes apply_changes() virtual
当编辑器将要保存项目,切换到另一个选项卡等时,将调用此方法。它要求插件应用任何待处理的状态更改以确保一致性。
例如,在着色器编辑器中使用它来使插件知道它必须将用户编写的着色器代码应用于对象。
- build build() virtual
- clear clear() virtual
清除所有状态并将正在编辑的对象重置为零。这样可以确保您的插件不会继续编辑当前存在的节点或错误场景中的节点。
- disable_plugin disable_plugin() virtual
当用户在项目设置窗口的“插件”选项卡中禁用EditorPlugin时,由引擎调用。
- edit edit(object: Object) virtual
此功能用于编辑特定对象类型(节点或资源)的插件。它要求编辑器编辑给定的对象。
- enable_plugin enable_plugin() virtual
当用户在项目设置窗口的“插件”选项卡中启用EditorPlugin时,由引擎调用。
- forward_canvas_draw_over_viewport forward_canvas_draw_over_viewport(overlay: Control) virtual
当2D编辑器的视口更新时,由引擎调用。使用overlay
Control进行绘图。您可以通过调用update_overlays手动更新视口。
- forward_canvas_force_draw_over_viewport forward_canvas_force_draw_over_viewport(overlay: Control) virtual
此方法与forward_canvas_draw_over_viewport相同,不同之处在于它可以绘制所有内容。当您需要一个可以显示其他内容的额外图层时很有用。
- forward_canvas_gui_input forward_canvas_gui_input(event: InputEvent) virtual
在当前编辑的场景中存在根节点时调用,实现handles并在2D视口中发生InputEvent。如果return true
EditorPlugin消耗event
事件,否则将转发到其他Editor类。例子:
# 阻止InputEvent到其他Editor类
func forward_canvas_gui_input(event):
var forward = true
return forward
为了将InputEvent转发到其他Editor类,必须return false
。例子:
# 消耗InputEventMouseMotion并转发其他InputEvent类型
func forward_canvas_gui_input(event):
var forward = false
if event is InputEventMouseMotion:
forward = true
return forward
- forward_spatial_gui_input forward_spatial_gui_input(camera: Camera, event: InputEvent) virtual
当前编辑的场景中存在根节点时调用,实现handles,并且在3D视口中发生InputEvent。如果return true
EditorPlugin消耗event
事件,否则将转发到其他Editor类。例子:
# 阻止InputEvent到其他Editor类
func forward_spatial_gui_input(camera, event):
var forward = true
return forward
为了将InputEvent转发到其他Editor类,必须return false
。例子:
# 消耗InputEventMouseMotion并转发其他InputEvent类型
func forward_spatial_gui_input(camera, event):
var forward = false
if event is InputEventMouseMotion:
forward = true
return forward
- get_breakpoints get_breakpoints() virtual
这是用于编辑器编辑基于脚本的对象。您可以使用(script:line
)格式返回断点列表,例如:res://path_to_script.gd:25
- get_editor_interface get_editor_interface()
返回EditorInterface对象,该对象使您可以控制IdeaXR编辑器的窗口及其功能。
- get_plugin_icon get_plugin_icon() virtual
覆盖插件中的此方法以返回Texture以便为其提供图标。
对于主屏幕插件,它显示在屏幕顶部,在“ 2D”,“ 3D”,“脚本”和“ AssetLib”按钮的右侧。
理想情况下,插件图标应为白色,透明背景,尺寸为16x16像素。
func get_plugin_icon():
# 您可以使用一个自定义图标
return preload("res://addons/my_plugin/my_plugin_icon.svg")
# 或使用一个内置图标
return get_editor_interface().get_base_control().get_icon("Node", "EditorIcons")
- get_plugin_name get_plugin_name() virtual
在IdeaXR编辑器中显示时,请在插件中覆盖此方法以提供插件的名称。
对于主屏幕插件,它显示在屏幕顶部,在“ 2D”,“ 3D”,“脚本”和“ AssetLib”按钮的右侧。
- get_script_create_dialog get_script_create_dialog()
获取用于制作脚本的编辑器对话框。
注意:用户可以在使用前对其进行配置。
- get_state get_state() virtual
获取插件编辑器的状态。在保存场景时(因此再次打开它时将保持状态)和切换选项卡(以便在选项卡返回时可以恢复状态)时使用此方法。
- get_undo_redo get_undo_redo()
获取撤消/重做对象。编辑器中的大多数操作都是可以撤消的,因此请使用此对象来确保在需要时执行此操作。
- get_window_layout get_window_layout(layout: ConfigFile) virtual
获取插件的GUI布局。当调用queue_save_layout或更改了编辑器布局(例如,更改停靠位置)时,此选项用于保存项目的编辑器布局。
- handles handles(object: Object) virtual
如果您的插件编辑特定类型的对象(资源或节点),请实现此功能。如果返回true
,那么当编辑器请求它们时,您将获得edit函数并调用make_visible。如果已声明方法forward_canvas_gui_input和forward_spatial_gui_input,它们也将被调用
- has_main_screen has_main_screen() virtual
如果这是主屏幕编辑器插件,则返回true
(它与2D,3D,Script起进入工作区选择器)。
- hide_bottom_panel hide_bottom_panel()
- make_bottom_panel_item_visible make_bottom_panel_item_visible(item: Control)
- make_visible make_visible(visible: bool) virtual
当要求编辑器可见时,将调用此函数。它用于编辑特定对象类型的插件。
请记住,您必须手动管理所有编辑器控件的可见性。
- queue_save_layout queue_save_layout() const
排队保存项目的编辑器布局。
- remove_autoload_singleton remove_autoload_singleton(name: String)
从列表中删除自动加载的name
。
- remove_control_from_bottom_panel remove_control_from_bottom_panel(control: Control)
从底部面板上删除控件。您必须手动调用Node.queue_free方法释放控件。
- remove_control_from_container remove_control_from_container(container: int, control: Control)
从指定的容器中删除控件。您必须手动调用Node.queue_free方法释放控件。
- remove_control_from_docks remove_control_from_docks(control: Control)
从面板中删除控件。您必须手动调用Node.queue_free方法释放控件。
- remove_custom_type remove_custom_type(type: String)
删除add_custom_type添加的自定义类型。
- remove_export_plugin remove_export_plugin(plugin: EditorExportPlugin)
- remove_import_plugin remove_import_plugin(importer: EditorImportPlugin)
- remove_inspector_plugin remove_inspector_plugin(plugin: EditorInspectorPlugin)
- remove_scene_import_plugin remove_scene_import_plugin(scene_importer: EditorSceneImporter)
- remove_spatial_gizmo_plugin remove_spatial_gizmo_plugin(plugin: EditorSpatialGizmoPlugin)
- remove_tool_menu_item (name: String)
从Project > Tools中删除菜单name
。
- save_external_data save_external_data() virtual
编辑器保存项目后或关闭项目时,将调用此方法。它要求插件保存已编辑的外部场景/资源。
- set_force_draw_over_forwarding_enabled set_force_draw_over_forwarding_enabled()
更新视口后,可启用2D编辑器的forward_canvas_force_draw_over_viewport和3D编辑器的forward_spatial_force_draw_over_viewport的调用。您只需要调用一次此方法,它将对该插件永久起作用。
- set_input_event_forwarding_always_enabled set_input_event_forwarding_always_enabled()
如果您始终想从forward_spatial_gui_input内的3D视图屏幕接收输入,请使用此方法。如果您的插件要在场景中使用raycast,它可能特别有用。
- set_state set_state(state: Dictionary) virtual
恢复get_state保存的状态。
- set_window_layout set_window_layout(layout: ConfigFile) virtual
恢复get_window_layout保存的插件GUI布局。
- update_overlays update_overlays() const
更新编辑器(2D /3D)视口的叠加层。导致调用方法:forward_canvas_draw_over_viewport,forward_canvas_force_draw_over_viewport,forward_spatial_draw_over_viewport和forward_spatial_force_draw_over_viewport。