Группы
Группы в Godot работают как тэги в других программах. Вы можете добавить узел в то количество грууп, которое вам необходимо. Тогда, в коде, вы можете использовать SceneTree чтобы:
Получить список узлов в группе.
Вызвать метод на всех узлах группы.
Отправить уведомление ко всем узлам группы.
Это полезное свойство для организации больших сцен и разделения кода.
Управление группами
Группы создаются с помощью добавления узла к новому имени группы, и аналогично, они удаляются путём удаления всех узлов из данной группы.
Есть два пути для добавления/удаления узлов в группах:
В процессе проектирования используйте вкладку Node в редакторе или Global Groups в настройках проекта.
Во время выполнения, с помощью вызова Node.add_to_group() или Node.remove_from_group().
Использование панели Узел
Вы можете создавать новые группы, используя вкладку «Groups» во вкладке Node.
Выберите узел в доке Scene, затем нажмите кнопку добавления с символом +.
Должно появиться модальное окно «Create New Group». Введите название группы в поле.
При желании вы можете выбрать опцию "Global", что сделает группу видимой во всем проекте и позволит использовать её повторно в любой сцене проекта. Это также позволит вам добавить к ней описание.
После этого нажмите «ОК», чтобы создать его.
Вы должны увидеть новые группы на вкладке Groups в разделе Scene Groups, если опция Global не была отмечена, или в разделе Global Groups, если эта опция была отмечена.
Выбранный Узел из дока «Scene» можно добавить в группы, установив флажок слева от групп в доке «Groups». Узел, выбранный при создании новой группы, будет автоматически отмечен.
Все группы, присутствующие в проекте, отмеченные как глобальные, созданные из любой сцены, будут видны в разделе «Global Groups».
Любая другая группа, созданная на основе узлов текущей сцены, будет отображаться в разделе «Scene Groups».
Предупреждение
Для групп Global и Scene используется одна и та же базовая логика. Группы с одинаковым именем считаются одной и той же группой. Эта функция носит исключительно организационный характер.
Вы можете управлять глобальными группами в панели «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 предоставляет множество других полезных методов для взаимодействия со сценами, их иерархией узлов и группами. Он позволяет легко переключаться между сценами или перезагружать их, выходить из игры или ставить и снимать ее с паузы. Он также предоставляет полезные сигналы.