Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Группы
Группы в Godot работают как тэги в других программах. Вы можете добавить узел в то количество грууп, которое вам необходимо. Тогда, в коде, вы можете использовать SceneTree чтобы:
Получить список узлов в группе.
Вызвать метод на всех узлах группы.
Отправить уведомление ко всем узлам группы.
Это полезное свойство для организации больших сцен и разделения кода.
Управление группами
Группы создаются с помощью добавления узла к новому имени группы, и аналогично, они удаляются путём удаления всех узлов из данной группы.
Есть два пути для добавления/удаления узлов в группах:
During design, by using the Groups dock in the editor, or the Groups tab in the Globals dock in project settings.
Во время выполнения, с помощью вызова Node.add_to_group() или Node.remove_from_group().
Совет
While not strictly required, it's recommended to use the snake_case naming
convention for group names.
Using the Groups dock
You can create new groups using the Groups dock.
Выберите узел в доке Scene, затем нажмите кнопку добавления с символом +.
Должно появиться модальное окно «Create New Group». Введите название группы в поле.
При желании вы можете выбрать опцию "Global", что сделает группу видимой во всем проекте и позволит использовать её повторно в любой сцене проекта. Это также позволит вам добавить к ней описание.
После этого нажмите «ОК», чтобы создать его.
You should see the new groups appear in the Groups dock under Scene Groups if the Global option was unmarked, or under Global Groups if that option was marked.
Выбранный Узел из дока «Scene» можно добавить в группы, установив флажок слева от групп в доке «Groups». Узел, выбранный при создании новой группы, будет автоматически отмечен.
Все группы, присутствующие в проекте, отмеченные как глобальные, созданные из любой сцены, будут видны в разделе «Global Groups».
Любая другая группа, созданная на основе узлов текущей сцены, будет отображаться в разделе «Scene Groups».
Предупреждение
Для групп Global и Scene используется одна и та же базовая логика. Группы с одинаковым именем считаются одной и той же группой. Эта функция носит исключительно организационный характер.
You can manage Global Groups in the Groups tab of the Globals dock, inside Project Settings. There, you will be able to add new global groups, or change existing groups' names and descriptions.
Использование кода
Вы также можете управлять группами из скриптов. Следующий код добавит узел, к которому вы прикрепите скрипт, к группе 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 предоставляет множество других полезных методов для взаимодействия со сценами, их иерархией узлов и группами. Он позволяет легко переключаться между сценами или перезагружать их, выходить из игры или ставить и снимать ее с паузы. Он также предоставляет полезные сигналы.