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.

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

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

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

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