Work in progress
The content of this page was not yet updated for Godot
4.2
and may be outdated. If you know how to improve this page or you can confirm
that it's up to date, feel free to open a pull request.
Erstellen von Plugins für den Hauptbildschirm¶
Was dieses Tutorial abdeckt¶
Mit Hauptbildschirm-Plugins können Sie neue Benutzeroberflächen im zentralen Teil des Editors erstellen, die neben den Buttons "2D", "3D", "Skript" und "AssetLib" erscheinen. Solche Editor-Plugins werden als "Hauptbildschirm-Plugins" bezeichnet.
Dieses Tutorial führt Sie durch die Erstellung eines grundlegenden Plugins für den Hauptbildschirm. Der Einfachheit halber enthält unser Hauptbildschirm-Plugin eine einzige Schaltfläche, mit der Text auf die Konsole gedruckt wird.
Initialisierung des Plugins¶
Erstellen Sie zunächst ein neues Plugin aus dem Menü Plugins. Für dieses Tutorial legen wir es in einem Ordner mit dem Namen main_screen
ab, aber Sie können jeden beliebigen Namen verwenden, den Sie möchten.
Das Plugin-Skript wird mit den Methoden _enter_tree()
und _exit_tree()
bereitgestellt, aber für ein Hauptbildschirm-Plugin müssen wir ein paar zusätzliche Methoden hinzufügen. Fügen Sie fünf zusätzliche Methoden hinzu, so dass das Skript wie folgt aussieht:
@tool
extends EditorPlugin
func _enter_tree():
pass
func _exit_tree():
pass
func _has_main_screen():
return true
func _make_visible(visible):
pass
func _get_plugin_name():
return "Main Screen Plugin"
func _get_plugin_icon():
return EditorInterface.get_editor_theme().get_icon("Node", "EditorIcons")
#if TOOLS
using Godot;
[Tool]
public partial class MainScreenPlugin : EditorPlugin
{
public override void _EnterTree()
{
}
public override void _ExitTree()
{
}
public override bool _HasMainScreen()
{
return true;
}
public override void _MakeVisible(bool visible)
{
}
public override string _GetPluginName()
{
return "Main Screen Plugin";
}
public override Texture2D _GetPluginIcon()
{
return EditorInterface.GetEditorTheme().GetIcon("Node", "EditorIcons");
}
}
#endif
Der wichtigste Teil in diesem Skript ist die Funktion _has_main_screen()
, die überladen ist, so dass sie true
zurückgibt. Diese Funktion wird automatisch vom Editor bei der Aktivierung des Plugins aufgerufen, um ihm mitzuteilen, dass dieses Plugin eine neue zentrale Ansicht zum Editor hinzufügt. Für den Moment belassen wir dieses Skript so wie es ist und kommen später darauf zurück.
Hauptbildschirm-Szene¶
Erstellen Sie eine neue Szene mit einem Root Node, das von Control
abgeleitet ist (für dieses Beispiel-Plugin werden wir den Root-Node zu einem CenterContainer
machen). Wählen Sie diesen Root-Node aus, klicken Sie im Viewport auf das Menü Layout
und wählen Sie Full Rect
. Man muss auch das Expand
-Flag für die vertikale Größe im Inspektor aktivieren. Das Panel nutzt nun den gesamten verfügbaren Platz im Hauptfenster.
Als nächstes fügen wir einen Button zu unserem Beispiel-Hauptbildschirm-Plugin hinzu. Fügen Sie einen Button
-Node hinzu, und setzen Sie den Text auf "Print Hello" oder ähnlich. Fügen Sie dem Button ein Skript wie dieses hinzu:
@tool
extends Button
func _on_print_hello_pressed():
print("Hello from the main screen plugin!")
using Godot;
[Tool]
public partial class PrintHello : Button
{
private void OnPrintHelloPressed()
{
GD.Print("Hello from the main screen plugin!");
}
}
Verbinden Sie dann das "pressed"-Signal mit sich selbst. Wenn Sie Hilfe zu Signalen benötigen, lesen Sie den Artikel Signale nutzen.
Wir sind mit dem Hauptbildschirm fertig. Speichern Sie die Szene als main_panel.tscn
.
Aktualisieren des Plugin-Skripts¶
Wir müssen das Skript main_screen_plugin.gd
aktualisieren, damit das Plugin unsere Hauptpanel-Szene instanziiert und dort platziert, wo sie sein soll. Hier ist das vollständige Plugin-Skript:
@tool
extends EditorPlugin
const MainPanel = preload("res://addons/main_screen/main_panel.tscn")
var main_panel_instance
func _enter_tree():
main_panel_instance = MainPanel.instantiate()
# Add the main panel to the editor's main viewport.
EditorInterface.get_editor_main_screen().add_child(main_panel_instance)
# Hide the main panel. Very much required.
_make_visible(false)
func _exit_tree():
if main_panel_instance:
main_panel_instance.queue_free()
func _has_main_screen():
return true
func _make_visible(visible):
if main_panel_instance:
main_panel_instance.visible = visible
func _get_plugin_name():
return "Main Screen Plugin"
func _get_plugin_icon():
# Must return some kind of Texture for the icon.
return EditorInterface.get_editor_theme().get_icon("Node", "EditorIcons")
#if TOOLS
using Godot;
[Tool]
public partial class MainScreenPlugin : EditorPlugin
{
PackedScene MainPanel = ResourceLoader.Load<PackedScene>("res://addons/main_screen/main_panel.tscn");
Control MainPanelInstance;
public override void _EnterTree()
{
MainPanelInstance = (Control)MainPanel.Instantiate();
// Add the main panel to the editor's main viewport.
EditorInterface.GetEditorMainScreen().AddChild(MainPanelInstance);
// Hide the main panel. Very much required.
_MakeVisible(false);
}
public override void _ExitTree()
{
if (MainPanelInstance != null)
{
MainPanelInstance.QueueFree();
}
}
public override bool _HasMainScreen()
{
return true;
}
public override void _MakeVisible(bool visible)
{
if (MainPanelInstance != null)
{
MainPanelInstance.Visible = visible;
}
}
public override string _GetPluginName()
{
return "Main Screen Plugin";
}
public override Texture2D _GetPluginIcon()
{
// Must return some kind of Texture for the icon.
return EditorInterface.GetEditorTheme().GetIcon("Node", "EditorIcons");
}
}
#endif
Ein paar spezielle Zeilen wurden hinzugefügt. MainPanel
ist eine Konstante, die eine Referenz auf die Szene hält, und wir instanzieren sie in main_panel_instance.
Die Funktion _enter_tree()
wird vor _ready()
aufgerufen. Dies ist der Ort, an dem wir die Hauptpanel-Szene instanziieren und sie als Child-Elementen von bestimmten Teilen des Editors hinzufügen. Wir benutzen EditorInterface.get_editor_main_screen()
, um den Hauptbildschirm des Editors zu erhalten und fügen unsere Hauptpanel-Instanz als Child zu diesem hinzu. Wir rufen die Funktion _make_visible(false)
auf, um das Hauptpanel auszublenden, damit es nicht um den Platz konkurriert, wenn das Plugin zum ersten Mal aktiviert wird.
Die Funktion _exit_tree()
wird aufgerufen, wenn das Plugin deaktiviert wird. Wenn der Hauptbildschirm noch existiert, rufen wir queue_free()
auf, um die Instanz freizugeben und aus dem Speicher zu entfernen.
Die Funktion _make_visible()
wird überschrieben, um das Hauptfenster je nach Bedarf ein- oder auszublenden. Diese Funktion wird automatisch vom Editor aufgerufen, wenn der Benutzer auf den Button des Hauptfensters am oberen Rand des Editors klickt.
Die Funktionen _get_plugin_name()
und _get_plugin_icon()
steuern den angezeigten Namen und das Icon für den Haupt-Viewport-Button des Plugins.
Eine weitere Funktion, die Sie hinzufügen können, ist die Funktion handles()
, die es Ihnen ermöglicht, einen Nodetyp zu behandeln, indem automatisch der Hauptbildschirm fokussiert wird, wenn der Typ ausgewählt wird. Dies ist ähnlich wie beim Anklicken eines 3D-Nodes automatisch in das 3D-Ansichtsfenster gewechselt wird.
Testen des Plugins¶
Aktivieren Sie das Plugin in den Projekteinstellungen. Sie werden einen neuen Button neben 2D, 3D, Skript oberhalb des Hauptfensters sehen. Wenn Sie darauf klicken, gelangen Sie zu Ihrem neuen Hauptbildschirm-Plugin, und mit dem Button in der Mitte können Sie Text ausgeben.
Wenn Sie eine fertige Version dieses Plugins ausprobieren möchten, sehen Sie sich die Plugin-Demos hier an: https://github.com/godotengine/godot-demo-projects/tree/master/plugins
Wenn Sie ein vollständigeres Beispiel für die Funktionen von Hauptbildschirm-Plugins sehen möchten, sehen Sie sich die 2.5D Demo-Projekte hier an: https://github.com/godotengine/godot-demo-projects/tree/master/misc/ 2.5d