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")

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!")

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")

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