Групи
Групи в Godot працюють як теги в іншому програмному забезпеченні. Ви можете додати вузол до будь-якої кількості груп. Потім у коді ви можете використовувати SceneTree для:
Отримайте список вузлів у групі.
Викликати метод на всіх вузлах у групі.
Надіслати сповіщення всім вузлам у групі.
Це корисна функція для організації великих сцен і відокремлення коду.
Керування групами
Групи створюються шляхом додавання вузла до імені нової групи, і так само вони видаляються шляхом видалення всіх вузлів із даної групи.
Існує два способи додавати/видаляти вузли до груп:
Під час проектування за допомогою док-станції Node у редакторі або глобальних груп у налаштуваннях проекту.
Під час виконання викликом Node.add_to_group() або Node.remove_from_group().
Використання док-станції Node
Ви можете створювати нові групи за допомогою вкладки «Групи» в док-станції Node.
Виберіть вузол у панелі «Сцена», а потім натисніть кнопку «Додати» із символом «+».
Тепер ви повинні побачити модаль «Створити нову групу». Напишіть назву групи в полі.
За бажанням можна позначити опцію «Глобальна», що зробить групу видимою для всього проекту та її можна буде повторно використовувати в будь-якій сцені проекту. Це також дозволить вам дати йому опис.
Після завершення натисніть OK, щоб створити його.
Ви повинні побачити нові групи на вкладці «Групи» у розділі «Групи сцен», якщо параметр «Глобальні» не було позначено, або в розділі «Глобальні групи», якщо цей параметр було позначено.
Вибраний вузол із панелі «Сцена» можна додати до груп, установивши прапорець ліворуч від груп у панелі «Групи». Вузол, який ви вибрали під час створення нової групи, буде автоматично перевірений.
Усі групи, присутні в проекті, які були позначені як Глобальні, створені з будь-якої сцени, будуть видимі в Глобальних групах.
Будь-яка інша група, отримана з вузлів у поточній сцені, з’явиться в розділі «Групи сцен».
Попередження
Та сама основна логіка використовується як для глобальних, так і для груп сцен. Групи з однаковою назвою вважаються однією. Ця особливість суто організаційна.
Ви можете керувати глобальними групами в док-станції Global Groups у налаштуваннях проекту. Там ви зможете додавати нові глобальні групи або змінювати назви та описи існуючих груп.
Використання коду
Ви також можете керувати групами за допомогою скрипта. Наступний код додає вузол, до якого ви приєднуєте скрипт, до групи guards, щойно він потрапляє в дерево сцени.
func _ready():
add_to_group("guards")
public override void _Ready()
{
base._Ready();
AddToGroup("guards");
}
Уявіть, що ви створюєте гру проникнення. Коли ворог помічає гравця, ви хочете, щоб усі охоронці та роботи були напоготові.
У вигаданому прикладі нижче ми використовуємо SceneTree.call_group(), щоб сповістити всіх ворогів про те, що гравця помітили.
func _on_player_spotted():
get_tree().call_group("guards", "enter_alert_mode")
public void _OnPlayerDiscovered()
{
GetTree().CallGroup("guards", "enter_alert_mode");
}
Наведений вище код викликає функцію enter_alert_mode для кожного члена групи guards.
Щоб отримати повний список вузлів у групі guards у вигляді масиву, ви можете викликати SceneTree.get_nodes_in_group():
var guards = get_tree().get_nodes_in_group("guards")
var guards = GetTree().GetNodesInGroup("guards");
Клас SceneTree надає безліч корисних функцій, таких як взаємодія зі сценами, ієрархією їх вузлів та групами вузлів. Він дозволяє вам легко перемикати сцени, або перезавантажувати їх, виходити з гри, або призупиняти та відновлювати її. Він також надає корисні сигнали.