Группы

Группы в Godot работают как тэги в других программах. Вы можете добавить узел в то количество грууп, которое вам необходимо. Тогда, в коде, вы можете использовать SceneTree чтобы:

  • Получить список узлов в группе.

  • Вызвать метод на всех узлах группы.

  • Отправить уведомление ко всем узлам группы.

Это полезное свойство для организации больших сцен и разделения кода.

Управление группами

Группы создаются с помощью добавления узла к новому имени группы, и аналогично, они удаляются путём удаления всех узлов из данной группы.

Есть два пути для добавления/удаления узлов в группах:

  • В процессе проектирования используйте вкладку Node в редакторе или Global Groups в настройках проекта.

  • Во время выполнения, с помощью вызова Node.add_to_group() или Node.remove_from_group().

Использование панели Узел

Вы можете создавать новые группы, используя вкладку «Groups» во вкладке Node.

../../_images/groups_node_tab.webp

Выберите узел в доке Scene, затем нажмите кнопку добавления с символом +.

../../_images/groups_add_new_group_button.webp

Должно появиться модальное окно «Create New Group». Введите название группы в поле.

При желании вы можете выбрать опцию "Global", что сделает группу видимой во всем проекте и позволит использовать её повторно в любой сцене проекта. Это также позволит вам добавить к ней описание.

После этого нажмите «ОК», чтобы создать его.

../../_images/groups_add_new_group_modal.webp

Вы должны увидеть новые группы на вкладке Groups в разделе Scene Groups, если опция Global не была отмечена, или в разделе Global Groups, если эта опция была отмечена.

Выбранный Узел из дока «Scene» можно добавить в группы, установив флажок слева от групп в доке «Groups». Узел, выбранный при создании новой группы, будет автоматически отмечен.

../../_images/groups_node_tab_with_created_groups.webp

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

Любая другая группа, созданная на основе узлов текущей сцены, будет отображаться в разделе «Scene Groups».

Предупреждение

Для групп Global и Scene используется одна и та же базовая логика. Группы с одинаковым именем считаются одной и той же группой. Эта функция носит исключительно организационный характер.

../../_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 предоставляет множество других полезных методов для взаимодействия со сценами, их иерархией узлов и группами. Он позволяет легко переключаться между сценами или перезагружать их, выходить из игры или ставить и снимать ее с паузы. Он также предоставляет полезные сигналы.