Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Creare estensioni per la schermata principale
Cosa tratta questo tutorial
Le estensioni per la schermata principale consentono di creare nuove interfacce utente nella parte centrale dell'editor, che appaiono accanto ai pulsanti "2D", "3D", "Script", "Gioco" e "AssetLib". Queste estensioni dell'editor sono chiamate "estensioni per la schermata principale".
Questo tutorial ti guiderà attraverso la creazione di un'estensione basilare per la schermata principale. Per semplicità, la nostra estensione conterrà un singolo pulsante che stampa testo sulla console.
Inizializzare l'estensione
Per prima cosa, crea un nuovo plugin dal menu Estensioni. In questo tutorial, lo metteremo in una cartella chiamata main_screen, ma puoi usare qualsiasi nome tu voglia.
The plugin script will come with _enter_tree() and _exit_tree()
methods, but for a main screen plugin we need to add a few extra methods.
Add four extra methods such that the script looks like this:
@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.Singleton.GetEditorTheme().GetIcon("Node", "EditorIcons");
}
}
#endif
La parte importante di questo script è la funzione _has_main_screen(), che è sovrascritta affinché restituisca true. Questa funzione viene chiamata automaticamente dall'editor all'attivazione dell'estensione, per segnalargli che l'estensione aggiunge una nuova vista centrale all'editor. Per ora, lasciamo lo script così com'è e ci torneremo più avanti.
Scena della scena principale
Crea una nuova scena con un nodo radice derivato da Control (per questa estensione di esempio, trasformeremo il nodo radice in CenterContainer). Seleziona questo nodo radice e, nella viewport, clicca sul menu Layout e seleziona Full Rect. Devi anche abilitare il flag di dimensione verticale Expand nell'ispettore. Il pannello ora utilizza tutto lo spazio disponibile nella viewport principale.
Adesso, aggiungiamo un pulsante alla nostra estensione di esempio per la schermata principale. Aggiungiamo un nodo Button e impostiamo il testo su "Print Hello" o simile. Aggiungiamo uno script al pulsante come questo:
@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!");
}
}
Poi connetti il segnale "pressed" a se stesso. Se hai bisogno di aiuto con i segnali, consulta l'articolo Utilizzo dei segnali.
Abbiamo finito con il pannello della schermata principale. Salviamo la scena come main_panel.tscn.
Aggiornare lo script dell'estensione
Abbiamo bisogno di aggiornare lo script main_screen_plugin.gd così che l'estensione istanzi la scena del pannello principale e la collochi dove deve stare. Ecco lo script completo dell'estensione:
@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.Singleton.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.Singleton.GetEditorTheme().GetIcon("Node", "EditorIcons");
}
}
#endif
Sono state aggiunte un paio di righe specifiche. MainPanel è una costante che contiene un riferimento alla scena e la istanziamo in main_panel_instance.
La funzione _enter_tree() viene chiamata prima di _ready(). È qui che istanziamo la scena del pannello principale e la aggiungiamo come figli di parti specifiche dell'editor. Utilizziamo EditorInterface.get_editor_main_screen() per ottenere la schermata principale dell'editor e aggiungere la nostra istanza del pannello principale come nodo figlio. Chiamiamo la funzione _make_visible(false) per nascondere il pannello principale così che non occupi spazio quando l'estensione viene attivata.
La funzione _exit_tree() viene chiamata quando l'estensione viene disattivata. Se la schermata principale è ancora presente, chiamiamo queue_free() per liberare l'istanza e rimuoverla dalla memoria.
La funzione _make_visible() è sovrascritta per nascondere o mostrare il pannello principale a seconda delle necessità. Questa funzione viene chiamata automaticamente dall'editor quando l'utente clicca sui pulsanti della finestra principale in alto all'editor.
Le funzioni _get_plugin_name() e _get_plugin_icon() controllano il nome e l'icona visualizzati per il pulsante dell'estensione nella viewport principale.
Un'altra funzione che puoi aggiungere è handles(), che permette di gestire un tipo di nodo, focalizzando automaticamente la schermata principale quando il tipo viene selezionato. È simile a come cliccando su un nodo 3D si passa automaticamente alla viewport 3D.
Provare l'estensione
Attiva il plugin nelle Impostazioni del progetto. Noterai un nuovo pulsante accanto a 2D, 3D, Script, sopra la viewport principale. Cliccandoci verrai indirizzato alla tua nuova estensione nella schermata principale e il pulsante al centro stamperà del testo.
Se vuoi provare una versione completa di questa estensione, dai un'occhiata alle demo di estensioni qui: https://github.com/godotengine/godot-demo-projects/tree/master/plugins
Se vuoi vedere un esempio più completo di ciò di cui sono capaci le estensioni per la schermata principale, dai un'occhiata ai progetti demo 2.5D qui: https://github.com/godotengine/godot-demo-projects/tree/master/misc/2.5d