Creando plugins para pantalla principal

Qué cubre este tutorial

Como se ve en la página :ref:'doc_making_plugins', hacer un plugin básico que extienda el editor es bastante fácil. Los plugins de pantalla principal le permiten crear nuevas IU en la parte central del editor, que aparecen junto a los botones "2D", "3D", "Script" y "AssetLib". Tales plugins de edición se conocen como "plugins de pantalla principal".

Este tutorial le guía a través de la creación de un plugin de pantalla principal básico. En aras de la simplicidad, nuestro plugin de pantalla principal contendrá un solo botón que imprime texto en la consola.

Inicializando el plugin

Primero crea un nuevo plugin desde el menú Plugins. Para este tutorial, lo pondremos en una carpeta llamada ''main_screen'', pero puedes usar cualquier nombre que quieras.

El script del plugin vendrá con los métodos ''_enter_tree()'' y ''_exit_tree()'', pero para un plugin de pantalla principal necesitamos agregar algunos métodos adicionales. Agregue cinco métodos adicionales de tal manera que el script tenga este aspecto:

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 get_editor_interface().get_base_control().get_icon("Node", "EditorIcons")

La parte importante de este script es la función ''has_main_screen()'', que está sobrecargada por lo que devuelve ''true''. Esta función es llamada automáticamente por el editor en la activación del plugin, para decirle que este plugin agrega una nueva vista central al editor. Por ahora, dejaremos este script tal cual y volveremos a él más tarde.

Escena de pantalla inicial

Cree una nueva escena con un nodo raíz derivado de ''Control'' (para este plugin de ejemplo, haremos que el nodo raíz sea un ''CenterContainer''). Seleccione este nodo raíz, y en el Viewport, haga clic en el menú ''Layout'' y seleccione ''Completo''. También debe habilitar el indicador de tamaño vertical ''Expandir'' en el inspector. El panel ahora utiliza todo el espacio disponible en la ventana gráfica principal.

A continuación, agreguemos un botón a nuestro complemento de pantalla principal de ejemplo. Agregue un nodo Botón y establezca el texto en "Imprimir Hola" o similar. Agregue un script al botón como este:

tool
extends Button


func _on_PrintHello_pressed():
    print("Hello from the main screen plugin!")

Luego conecte la señal "presionada" a sí misma. Si necesita ayuda con las señales, consulte el artículo Señales.

Hemos terminado con el panel de la pantalla principal. Guarde la escena como main_panel.tscn.

Actualizar el complemento de script (secuencia de comandos)

Necesitamos actualizar el script `` main_screen_plugin.gd '' para que el complemento instale nuestra escena del panel principal y la coloque donde debe estar. Aquí está el script del complemento completo:

tool
extends EditorPlugin


const MainPanel = preload("res://addons/main_screen/main_panel.tscn")

var main_panel_instance


func _enter_tree():
    main_panel_instance = MainPanel.instance()
    # Add the main panel to the editor's main viewport.
    get_editor_interface().get_editor_viewport().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 get_editor_interface().get_base_control().get_icon("Node", "EditorIcons")

Se agregaron un par de líneas específicas. `` MainPanel`` es una constante que contiene una referencia a la escena, y la instanciamos en main_panel_instance.

La función `` _enter_tree () '' se llama antes que `` _ready () ''. Aquí es donde instanciamos la escena del panel principal y los agregamos como elementos secundarios de partes específicas del editor. Usamos `` get_editor_interface (). Get_editor_viewport () '' para obtener la ventana gráfica y agregarle nuestra instancia del panel principal como un niño. Llamamos a la función `` make_visible (false) '' para ocultar el panel principal para que no compita por el espacio cuando se activa por primera vez el complemento.

La función `` _exit_tree () '' se llama cuando el complemento está desactivado. Si la pantalla principal aún existe, llamamos a `` queue_free () '' para liberar la instancia y eliminarla de la memoria.

La función `` make_visible () '' se anula para ocultar o mostrar el panel principal según sea necesario. El editor llama automáticamente a esta función cuando el usuario hace clic en los botones de la ventana principal en la parte superior del editor.

Las funciones `` get_plugin_name () '' y `` get_plugin_icon () '' controlan el nombre y el icono mostrados para el botón de la ventana principal del complemento.

Otra función que puede agregar es la función `` handle () '', que le permite manejar un tipo de nodo, enfocando automáticamente la pantalla principal cuando se selecciona el tipo. Esto es similar a cómo al hacer clic en un nodo 3D se cambiará automáticamente a la ventana gráfica 3D.

Prueba el plugin

Active el complemento en la Configuración del proyecto. Observará un nuevo botón junto a 2D, 3D, Script encima de la ventana principal. Al hacer clic en él, accederá a su nuevo complemento de la pantalla principal y el botón del medio imprimirá el texto.

Si quieres probar la versión terminada de este plugin, revisa las demos de plugins aquí: https://github.com/godotengine/godot-demo-projects/tree/master/plugins

Si desea ver un ejemplo más completo de lo que son capaces de hacer los complementos de la pantalla principal, consulte los proyectos de demostración 2.5D aquí: https://github.com/godotengine/godot-demo-projects/tree/master/misc/2.5d