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.

Создание плагинов главного экрана

Что охватывает этот урок

Плагины главного экрана позволяют создавать новые пользовательские интерфейсы в центральной части редактора, которые отображаются рядом с кнопками "2D", "3D", "Script", "Game", и "AssetLib". Такие плагины редактора называются "Main screen plugins".

В этом руководстве мы покажем вам, как создать простой плагин для главного экрана. Для простоты наш плагин будет содержать одну кнопку, которая выводит текст в консоль.

Инициализация плагина

Сначала создайте новый плагин в меню Plugins. В этом руководстве мы поместим его в папку main_screen, но вы можете использовать любое другое имя.

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

Важная часть этого скрипта — функция _has_main_screen(), которая перегружена и возвращает true. Эта функция автоматически вызывается редактором при активации плагина, чтобы сообщить ему, что плагин добавляет в редактор новое центральное представление. Пока мы оставим этот скрипт как есть и вернёмся к нему позже.

Главная сцена экрана

Создайте новую сцену с корневым узлом, производным от Control (в этом примере плагина мы сделаем корневым узлом CenterContainer). Выберите этот корневой узел и в области просмотра нажмите меню Layout и выберите Full Rect. Также необходимо включить флажок Expand для вертикального размера в инспекторе. Теперь панель занимает всё доступное пространство в основной области просмотра.

Теперь добавим кнопку в наш пример плагина главного экрана. Добавьте узел Button и задайте текст "Print Hello" или аналогичный. Добавьте скрипт к кнопке следующим образом:

@tool
extends Button


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

Затем соедините сигнал "pressed" с самим собой. Если вам нужна помощь с сигналами, см. статью Использование сигналов.

С панелью главного экрана всё готово. Сохраните сцену как main_panel.tscn.

Обновите скрипт плагина

Нам нужно обновить скрипт main_screen_plugin.gd, чтобы плагин создавал сцену нашей главной панели и размещал её там, где нужно. Вот полный скрипт плагина:

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

Было добавлено несколько конкретных строк. MainPanel — это константа, которая содержит ссылку на сцену, и мы создаем ее экземпляр в main_panel_instance.

Функция _enter_tree() вызывается перед _ready(). Здесь мы создаём экземпляр сцены главной панели и добавляем их в качестве дочерних элементов определённых частей редактора. Мы используем EditorInterface.get_editor_main_screen() для получения главного экрана редактора и добавляем к нему экземпляр нашей главной панели в качестве дочернего элемента. Мы вызываем функцию _make_visible(false), чтобы скрыть главную панель, чтобы она не занимала место при первой активации плагина.

Функция _exit_tree() вызывается при деактивации плагина. Если главный экран всё ещё существует, мы вызываем queue_free(), чтобы освободить экземпляр и удалить его из памяти.

Функция _make_visible() переопределяется для скрытия или отображения главной панели по мере необходимости. Эта функция автоматически вызывается редактором при нажатии пользователем на кнопки главной области просмотра в верхней части редактора.

Функции _get_plugin_name() и _get_plugin_icon() управляют отображаемым именем и значком для главной кнопки области просмотра плагина.

Другая функция, которую вы можете добавить, — это функция handles(), которая позволяет обрабатывать тип узла, автоматически фокусируя главный экран при выборе этого типа. Это похоже на то, как щелчок по 3D-узлу автоматически переключает на 3D-окно просмотра.

Попробуйте плагин

Активируйте плагин в настройках проекта. Вы увидите новую кнопку рядом с пунктами 2D, 3D, Script над основным окном просмотра. Нажав на неё, вы перейдёте к новому плагину главного экрана, а кнопка посередине выведет текст.

Если вы хотите попробовать готовую версию этого плагина, ознакомьтесь с демонстрациями плагинов здесь: https://github.com/godotengine/godot-demo-projects/tree/master/plugins

Если вы хотите увидеть более полный пример того, на что способны плагины главного экрана, ознакомьтесь с демонстрационными проектами 2.5D здесь: https://github.com/godotengine/godot-demo-projects/tree/master/misc/2.5d