Групи

Групи в Godot працюють як теги в іншому програмному забезпеченні. Ви можете додати вузол до будь-якої кількості груп. Потім у коді ви можете використовувати SceneTree для:

  • Отримайте список вузлів у групі.

  • Викликати метод на всіх вузлах у групі.

  • Надіслати сповіщення всім вузлам у групі.

Це корисна функція для організації великих сцен і відокремлення коду.

Керування групами

Групи створюються шляхом додавання вузла до імені нової групи, і так само вони видаляються шляхом видалення всіх вузлів із даної групи.

Існує два способи додавати/видаляти вузли до груп:

  • Під час проектування за допомогою док-станції Node у редакторі або глобальних груп у налаштуваннях проекту.

  • Під час виконання викликом Node.add_to_group() або Node.remove_from_group().

Використання док-станції Node

Ви можете створювати нові групи за допомогою вкладки «Групи» в док-станції Node.

../../_images/groups_node_tab.webp

Виберіть вузол у панелі «Сцена», а потім натисніть кнопку «Додати» із символом «+».

../../_images/groups_add_new_group_button.webp

Тепер ви повинні побачити модаль «Створити нову групу». Напишіть назву групи в полі.

За бажанням можна позначити опцію «Глобальна», що зробить групу видимою для всього проекту та її можна буде повторно використовувати в будь-якій сцені проекту. Це також дозволить вам дати йому опис.

Після завершення натисніть OK, щоб створити його.

../../_images/groups_add_new_group_modal.webp

Ви повинні побачити нові групи на вкладці «Групи» у розділі «Групи сцен», якщо параметр «Глобальні» не було позначено, або в розділі «Глобальні групи», якщо цей параметр було позначено.

Вибраний вузол із панелі «Сцена» можна додати до груп, установивши прапорець ліворуч від груп у панелі «Групи». Вузол, який ви вибрали під час створення нової групи, буде автоматично перевірений.

../../_images/groups_node_tab_with_created_groups.webp

Усі групи, присутні в проекті, які були позначені як Глобальні, створені з будь-якої сцени, будуть видимі в Глобальних групах.

Будь-яка інша група, отримана з вузлів у поточній сцені, з’явиться в розділі «Групи сцен».

Попередження

Та сама основна логіка використовується як для глобальних, так і для груп сцен. Групи з однаковою назвою вважаються однією. Ця особливість суто організаційна.

../../_images/groups_node_tab_with_multiple_types_of_groups.webp

Ви можете керувати глобальними групами в док-станції Global Groups у налаштуваннях проекту. Там ви зможете додавати нові глобальні групи або змінювати назви та описи існуючих груп.

../../_images/groups_global_groups_settings.webp

Використання коду

Ви також можете керувати групами за допомогою скрипта. Наступний код додає вузол, до якого ви приєднуєте скрипт, до групи guards, щойно він потрапляє в дерево сцени.

func _ready():
    add_to_group("guards")

Уявіть, що ви створюєте гру проникнення. Коли ворог помічає гравця, ви хочете, щоб усі охоронці та роботи були напоготові.

У вигаданому прикладі нижче ми використовуємо SceneTree.call_group(), щоб сповістити всіх ворогів про те, що гравця помітили.

func _on_player_spotted():
    get_tree().call_group("guards", "enter_alert_mode")

Наведений вище код викликає функцію enter_alert_mode для кожного члена групи guards.

Щоб отримати повний список вузлів у групі guards у вигляді масиву, ви можете викликати SceneTree.get_nodes_in_group():

var guards = get_tree().get_nodes_in_group("guards")

Клас SceneTree надає безліч корисних функцій, таких як взаємодія зі сценами, ієрархією їх вузлів та групами вузлів. Він дозволяє вам легко перемикати сцени, або перезавантажувати їх, виходити з гри, або призупиняти та відновлювати її. Він також надає корисні сигнали.