Plugins are used by the editor to extend functionality. The most common types of plugins are those which edit a given node or resource type, import plugins and export plugins. See also godot.EditorScript
to add functions to the editor.
Constructor
Variables
Methods
addAutoloadSingleton(name:String, path:String):Void
Adds a script at path
to the Autoload list as name
.
addControlToBottomPanel(control:Control, title:String):ToolButton
Adds a control to the bottom panel (together with Output, Debug, Animation, etc). Returns a reference to the button added. It's up to you to hide/show the button when needed. When your plugin is deactivated, make sure to remove your custom control with godot.EditorPlugin.removeControlFromBottomPanel
and free it with godot.Node.queueFree
.
addControlToContainer(container:EditorPlugin_CustomControlContainer, control:Control):Void
Adds a custom control to a container (see godot.EditorPlugin_CustomControlContainer
). There are many locations where custom controls can be added in the editor UI.
Please remember that you have to manage the visibility of your custom controls yourself (and likely hide it after adding it).
When your plugin is deactivated, make sure to remove your custom control with godot.EditorPlugin.removeControlFromContainer
and free it with godot.Node.queueFree
.
addControlToDock(slot:EditorPlugin_DockSlot, control:Control):Void
Adds the control to a specific dock slot (see godot.EditorPlugin_DockSlot
for options).
If the dock is repositioned and as long as the plugin is active, the editor will save the dock position on further sessions.
When your plugin is deactivated, make sure to remove your custom control with godot.EditorPlugin.removeControlFromDocks
and free it with godot.Node.queueFree
.
addCustomType(type:String, base:String, script:Script, icon:Texture):Void
Adds a custom type, which will appear in the list of nodes or resources. An icon can be optionally passed.
When given node or resource is selected, the base type will be instanced (ie, "Spatial", "Control", "Resource"), then the script will be loaded and set to this object.
You can use the virtual method godot.EditorPlugin.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.
addExportPlugin(plugin:EditorExportPlugin):Void
Registers a new godot.EditorExportPlugin
. Export plugins are used to perform tasks when the project is being exported.
See godot.EditorPlugin.addInspectorPlugin
for an example of how to register a plugin.
addImportPlugin(importer:EditorImportPlugin):Void
Registers a new godot.EditorImportPlugin
. Import plugins are used to import custom and unsupported assets as a custom godot.Resource
type.
Note: If you want to import custom 3D asset formats use godot.EditorPlugin.addSceneImportPlugin
instead.
See godot.EditorPlugin.addInspectorPlugin
for an example of how to register a plugin.
addInspectorPlugin(plugin:EditorInspectorPlugin):Void
Registers a new godot.EditorInspectorPlugin
. Inspector plugins are used to extend godot.EditorInspector
and provide custom configuration tools for your object's properties.
Note: Always use godot.EditorPlugin.removeInspectorPlugin
to remove the registered godot.EditorInspectorPlugin
when your godot.EditorPlugin
is disabled to prevent leaks and an unexpected behavior.
const MyInspectorPlugin = preload("res://addons/your_addon/path/to/your/script.gd")
var inspector_plugin = MyInspectorPlugin.new()
func _enter_tree():
add_inspector_plugin(inspector_plugin)
func _exit_tree():
remove_inspector_plugin(inspector_plugin)
addSceneImportPlugin(sceneImporter:EditorSceneImporter):Void
Registers a new godot.EditorSceneImporter
. Scene importers are used to import custom 3D asset formats as scenes.
addSpatialGizmoPlugin(plugin:EditorSpatialGizmoPlugin):Void
Registers a new godot.EditorSpatialGizmoPlugin
. Gizmo plugins are used to add custom gizmos to the 3D preview viewport for a godot.Spatial
.
See godot.EditorPlugin.addInspectorPlugin
for an example of how to register a plugin.
addToolMenuItem(name:String, handler:Object, callback:String, ?ud:Dynamic):Void
Adds a custom menu item to Project > Tools as name
that calls callback
on an instance of handler
with a parameter ud
when user activates it.
addToolSubmenuItem(name:String, submenu:Object):Void
Adds a custom submenu under Project > Tools > name
. submenu
should be an object of class godot.PopupMenu
. This submenu should be cleaned up using remove_tool_menu_item(name)
.
applyChanges():Void
This method is called when the editor is about to save the project, switch to another tab, etc. It asks the plugin to apply any pending state changes to ensure consistency.
This is used, for example, in shader editors to let the plugin know that it must apply the shader code being written by the user to the object.
build():Bool
This method is called when the editor is about to run the project. The plugin can then perform required operations before the project runs.
This method must return a boolean. If this method returns false
, the project will not run. The run is aborted immediately, so this also prevents all other plugins' godot.EditorPlugin.build
methods from running.
clear():Void
Clear all the state and reset the object being edited to zero. This ensures your plugin does not keep editing a currently existing node, or a node from the wrong scene.
disablePlugin():Void
Called by the engine when the user disables the godot.EditorPlugin
in the Plugin tab of the project settings window.
edit(object:Object):Void
This function is used for plugins that edit specific object types (nodes or resources). It requests the editor to edit the given object.
enablePlugin():Void
Called by the engine when the user enables the godot.EditorPlugin
in the Plugin tab of the project settings window.
forwardCanvasDrawOverViewport(overlay:Control):Void
Called by the engine when the 2D editor's viewport is updated. Use the overlay
godot.Control
for drawing. You can update the viewport manually by calling godot.EditorPlugin.updateOverlays
.
func forward_canvas_draw_over_viewport(overlay):
# Draw a circle at cursor position.
overlay.draw_circle(overlay.get_local_mouse_position(), 64, Color.white)
func forward_canvas_gui_input(event):
if event is InputEventMouseMotion:
# Redraw viewport when cursor is moved.
update_overlays()
return true
return false
forwardCanvasForceDrawOverViewport(overlay:Control):Void
This method is the same as godot.EditorPlugin.forwardCanvasDrawOverViewport
, except it draws on top of everything. Useful when you need an extra layer that shows over anything else.
You need to enable calling of this method by using godot.EditorPlugin.setForceDrawOverForwardingEnabled
.
forwardCanvasGuiInput(event:InputEvent):Bool
Called when there is a root node in the current edited scene, godot.EditorPlugin.handles
is implemented and an godot.InputEvent
happens in the 2D viewport. Intercepts the godot.InputEvent
, if return true
godot.EditorPlugin
consumes the event
, otherwise forwards event
to other Editor classes. Example:
# Prevents the InputEvent to reach other Editor classes
func forward_canvas_gui_input(event):
var forward = true
return forward
Must return false
in order to forward the godot.InputEvent
to other Editor classes. Example:
# Consumes InputEventMouseMotion and forwards other InputEvent types
func forward_canvas_gui_input(event):
var forward = false
if event is InputEventMouseMotion:
forward = true
return forward
forwardSpatialDrawOverViewport(overlay:Control):Void
Called by the engine when the 3D editor's viewport is updated. Use the overlay
godot.Control
for drawing. You can update the viewport manually by calling godot.EditorPlugin.updateOverlays
.
func forward_spatial_draw_over_viewport(overlay):
# Draw a circle at cursor position.
overlay.draw_circle(overlay.get_local_mouse_position(), 64)
func forward_spatial_gui_input(camera, event):
if event is InputEventMouseMotion:
# Redraw viewport when cursor is moved.
update_overlays()
return true
return false
forwardSpatialForceDrawOverViewport(overlay:Control):Void
This method is the same as godot.EditorPlugin.forwardSpatialDrawOverViewport
, except it draws on top of everything. Useful when you need an extra layer that shows over anything else.
You need to enable calling of this method by using godot.EditorPlugin.setForceDrawOverForwardingEnabled
.
forwardSpatialGuiInput(camera:Camera, event:InputEvent):Bool
Called when there is a root node in the current edited scene, godot.EditorPlugin.handles
is implemented and an godot.InputEvent
happens in the 3D viewport. Intercepts the godot.InputEvent
, if return true
godot.EditorPlugin
consumes the event
, otherwise forwards event
to other Editor classes. Example:
# Prevents the InputEvent to reach other Editor classes
func forward_spatial_gui_input(camera, event):
var forward = true
return forward
Must return false
in order to forward the godot.InputEvent
to other Editor classes. Example:
# Consumes InputEventMouseMotion and forwards other InputEvent types
func forward_spatial_gui_input(camera, event):
var forward = false
if event is InputEventMouseMotion:
forward = true
return forward
inlinegetBreakpoints():Array<String>
This is for editors that edit script-based objects. You can return a list of breakpoints in the format (script:line
), for example: res://path_to_script.gd:25
.
getEditorInterface():EditorInterface
Returns the godot.EditorInterface
object that gives you control over Godot editor's window and its functionalities.
getPluginIcon():Texture
Override this method in your plugin to return a godot.Texture
in order to give it an icon.
For main screen plugins, this appears at the top of the screen, to the right of the "2D", "3D", "Script", and "AssetLib" buttons.
Ideally, the plugin icon should be white with a transparent background and 16x16 pixels in size.
func get_plugin_icon():
# You can use a custom icon:
return preload("res://addons/my_plugin/my_plugin_icon.svg")
# Or use a built-in icon:
return get_editor_interface().get_base_control().get_icon("Node", "EditorIcons")
getPluginName():String
Override this method in your plugin to provide the name of the plugin when displayed in the Godot editor.
For main screen plugins, this appears at the top of the screen, to the right of the "2D", "3D", "Script", and "AssetLib" buttons.
getScriptCreateDialog():ScriptCreateDialog
Gets the Editor's dialogue used for making scripts.
Note: Users can configure it before use.
Warning: Removing and freeing this node will render a part of the editor useless and may cause a crash.
getState():Dictionary
Gets the state of your plugin editor. This is used when saving the scene (so state is kept when opening it again) and for switching tabs (so state can be restored when the tab returns).
getUndoRedo():UndoRedo
Gets the undo/redo object. Most actions in the editor can be undoable, so use this object to make sure this happens when it's worth it.
getWindowLayout(layout:ConfigFile):Void
Gets the GUI layout of the plugin. This is used to save the project's editor layout when godot.EditorPlugin.queueSaveLayout
is called or the editor layout was changed(For example changing the position of a dock).
handles(object:Object):Bool
Implement this function if your plugin edits a specific type of object (Resource or Node). If you return true
, then you will get the functions godot.EditorPlugin.edit
and godot.EditorPlugin.makeVisible
called when the editor requests them. If you have declared the methods godot.EditorPlugin.forwardCanvasGuiInput
and godot.EditorPlugin.forwardSpatialGuiInput
these will be called too.
hasMainScreen():Bool
Returns true
if this is a main screen editor plugin (it goes in the workspace selector together with 2D, 3D, Script and AssetLib).
makeVisible(visible:Bool):Void
This function will be called when the editor is requested to become visible. It is used for plugins that edit a specific object type.
Remember that you have to manage the visibility of all your editor controls manually.
removeControlFromBottomPanel(control:Control):Void
Removes the control from the bottom panel. You have to manually godot.Node.queueFree
the control.
removeControlFromContainer(container:EditorPlugin_CustomControlContainer, control:Control):Void
Removes the control from the specified container. You have to manually godot.Node.queueFree
the control.
removeControlFromDocks(control:Control):Void
Removes the control from the dock. You have to manually godot.Node.queueFree
the control.
removeExportPlugin(plugin:EditorExportPlugin):Void
Removes an export plugin registered by godot.EditorPlugin.addExportPlugin
.
removeImportPlugin(importer:EditorImportPlugin):Void
Removes an import plugin registered by godot.EditorPlugin.addImportPlugin
.
removeInspectorPlugin(plugin:EditorInspectorPlugin):Void
Removes an inspector plugin registered by godot.EditorPlugin.addImportPlugin
removeSceneImportPlugin(sceneImporter:EditorSceneImporter):Void
Removes a scene importer registered by godot.EditorPlugin.addSceneImportPlugin
.
removeSpatialGizmoPlugin(plugin:EditorSpatialGizmoPlugin):Void
Removes a gizmo plugin registered by godot.EditorPlugin.addSpatialGizmoPlugin
.
saveExternalData():Void
This method is called after the editor saves the project or when it's closed. It asks the plugin to save edited external scenes/resources.
setForceDrawOverForwardingEnabled():Void
Enables calling of godot.EditorPlugin.forwardCanvasForceDrawOverViewport
for the 2D editor and godot.EditorPlugin.forwardSpatialForceDrawOverViewport
for the 3D editor when their viewports are updated. You need to call this method only once and it will work permanently for this plugin.
setInputEventForwardingAlwaysEnabled():Void
Use this method if you always want to receive inputs from 3D view screen inside godot.EditorPlugin.forwardSpatialGuiInput
. It might be especially usable if your plugin will want to use raycast in the scene.
setWindowLayout(layout:ConfigFile):Void
Restore the plugin GUI layout saved by godot.EditorPlugin.getWindowLayout
.
updateOverlays():Int
Updates the overlays of the 2D and 3D editor viewport. Causes methods godot.EditorPlugin.forwardCanvasDrawOverViewport
, godot.EditorPlugin.forwardCanvasForceDrawOverViewport
, godot.EditorPlugin.forwardSpatialDrawOverViewport
and godot.EditorPlugin.forwardSpatialForceDrawOverViewport
to be called.