The inspector dock allows you to create custom widgets to edit properties through plugins. This can be beneficial when working with custom datatypes and resources, although you can use the feature to change the inspector widgets for built-in types. You can design custom controls for specific properties, entire objects, and even separate controls associated with particular datatypes.
This guide explains how to use the EditorInspectorPlugin and EditorProperty classes to create a custom interface for integers, replacing the default behavior with a button that generates random values between 0 and 99.
Setting up your plugin¶
Create a new empty plugin to get started.
See Making plugins guide to set up your new plugin.
Let's assume you've called your plugin folder
my_inspector_plugin. If so,
you should end up with a new
addons/my_inspector_plugin folder that contains
plugin.gd is a script extending EditorPlugin and you
need to introduce new code for its
To set up your inspector plugin, you must load its script, then create and add
the instance by calling
add_inspector_plugin(). If the plugin is disabled,
you should remove the instance you have added by calling
Here, you are loading a script and not a packed scene. Therefore you
new() instead of
Interacting with the inspector¶
To interact with the inspector dock, your
MyInspectorPlugin.gd script must
extend the EditorInspectorPlugin class. This class provides several
virtual methods that affect how the inspector handles properties.
To have any effect at all, the script must implement the
method. This function is called for each edited Object and must
true if this plugin should handle the object or its properties.
This includes any Resource attached to the object.
You can implement four other methods to add controls to the inspector at
specific positions. The
parse_end() methods are called
only once at the beginning and the end of parsing for each object, respectively.
They can add controls at the top or bottom of the inspector layout by calling
As the editor parses the object, it calls the
parse_property() methods. There, in addition to
you can call both
add_property_editor_for_multiple_properties(). Use these last two methods to
specifically add EditorProperty-based controls.
Adding an interface to edit properties¶
The EditorProperty class is a special type of Control that can interact with the inspector dock's edited objects. It doesn't display anything but can house any other control nodes, including complex scenes.
There are three essential parts to the script extending EditorProperty:
You must define the
_init()method to set up the control nodes' structure.
You should implement the
update_property()to handle changes to the data from the outside.
A signal must be emitted at some point to inform the inspector that the control has changed the property using
You can display your custom widget in two ways. Use just the default
method to display it to the right of the property name, and use
set_bottom_editor() to position it below the name.