Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Группы

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

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

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

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

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

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

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

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

  • Во время разработки можно использовать панель Узел в редакторе.

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

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

Вы можете добавить узлы в текущей сцене в группы используя вкладку Группы на панели Узел.

../../_images/groups_node_tab.webp

Select one or more nodes in the Scene dock and write the group name in the field, then click Add.

../../_images/groups_add_node_to_group.webp

You should now see the group appear.

../../_images/groups_node_after_adding.webp

In a complex project, you may end up with many groups or large scenes with many nodes. You can add or remove any node to groups using the Group Editor window. To access it, click the Manage Groups button.

../../_images/groups_manage_groups_button.webp

The Group Editor window appears. Here's a screenshot from a complex project to illustrate the tool's purpose.

../../_images/groups_group_editor_window.webp

It has three columns:

  1. A list of groups used by nodes in the current scene.

  2. A list of nodes that are not part of the selected group.

  3. A list of nodes in the group.

The fields at the bottom allow you to add new groups or filter nodes in the second and third columns.

Примечание

Any node name that's greyed out means the node was added to the group in a different scene and you cannot edit it here. This happens on scene instances in particular.

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

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