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...
Створення плагінів головного екрана
Що охоплює цей посібник
Плагіни головного екрана дозволяють створювати нові інтерфейси користувача в центральній частині редактора, які відображаються поруч із кнопками «2D», «3D», «Скрипт», «Гра» та «AssetLib». Такі плагіни редактора називаються «плагінами головного екрана».
Цей підручник допоможе вам створити базовий плагін головного екрана. Заради простоти наш плагін головного екрана міститиме одну кнопку, яка друкує текст на консолі.
Ініціалізація плагіна
Спочатку створіть новий плагін у меню «Плагіни». Для цього підручника ми розмістимо його в папці під назвою 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")
#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
Важливою частиною цього скрипт є функція _has_main_screen(), яка перевантажена, тому повертає true. Ця функція автоматично викликається редактором після активації плагіна, щоб повідомити, що цей плагін додає до редактора новий центральний вигляд. Наразі ми залишимо цей скрипт як є та повернемося до нього пізніше.
Сцена головного екрана
Створіть нову сцену з кореневим вузлом, отриманим від Control (для цього прикладу плагіна ми зробимо кореневий вузол CenterContainer). Виберіть цей кореневий вузол і у вікні перегляду клацніть меню Макет і виберіть Повний прямокутник. Вам також потрібно ввімкнути прапорець вертикального розміру Розгорнути в інспекторі. Тепер панель використовує весь простір, доступний у головному вікні перегляду.
Далі додамо кнопку до нашого прикладу плагіна головного екрана. Додайте вузол Button та встановіть для тексту значення «Друкувати привіт» або подібне. Додайте такий скрипт до кнопки:
@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!");
}
}
Потім підключіть «натиснутий» сигнал до себе. Якщо вам потрібна допомога щодо сигналів, перегляньте статтю Використання сигналів.
Ми закінчили з панеллю головного екрана. Збережіть сцену як 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")
#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
Було додано кілька конкретних рядків. 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-вузла автоматично перемикається на тривимірне вікно перегляду.
Спробуйте плагін
Активуйте плагін у налаштуваннях проекту. Ви побачите нову кнопку поруч із 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