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...
Grupos
Grupos no Godot funcionam assim como tags em outros programas. Você pode adicionar um nó a quantos grupos quiser. Aí, no código, você pode usar a SceneTree para:
Obter uma lista de nós em um grupo.
Chamar um método em todos os nós de um grupo.
Enviar uma notificação a todos os nós de um grupo.
É um recurso muito útil para organizar cenas grandes e desacoplar o seu código.
Gerenciando grupos
Para criar um grupo, basta adicionar um nó a um grupo com um novo nome, da mesma forma, um grupo é removido quando todos os nós são removidos dele.
Há duas maneiras de acrescentar/remover nós aos grupos:
During design, by using the Groups dock in the editor, or the Groups tab in the Globals dock in project settings.
Via código, executando Node.add_to_group() ou Node.remove_from_group().
Dica
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.
Selecione um nó na aba Cena e então clique no botão com o símbolo de +.
O modal de Criar Novo Grupo vai aparecer. Digita o nome do grupo no campo.
Você pode ativar a opção "Global" para tornar este grupo visível no projeto inteiro, e permitir seu uso em qualquer cena do projeto. Grupos globais também podem receber uma descrição.
Quando estiver pronto, clique em Ok para criar.
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.
Um nó selecionado na aba Cena pode ser adicionado a grupos marcando a caixa de seleção à esquerda dos grupos na aba Grupos. Ao criar um novo grupo, o nó selecionado será adicionado ao grupo automaticamente.
Todos os grupos presentes no projeto que foram marcados como Globais, criados em qualquer cena, ficarão visíveis na seção Grupos Globais.
Qualquer outro grupo derivado de nós na cena atual aparecerá em Grupos da Cena.
Aviso
Por baixo dos panos, grupos Globais e da Cena são a mesma coisa. Grupos com o mesmo nome serão considerados o mesmo grupo. Esse recurso é apenas organizacional.
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.
Usando código
Você também pode gerenciar grupos a partir de scripts. O código abaixo adiciona o nó com este script anexado ao grupo guards assim que ele entra na árvore de cena.
func _ready():
add_to_group("guards")
public override void _Ready()
{
base._Ready();
AddToGroup("guards");
}
Imagine que você está criando um jogo de infiltração. Quando um inimigo avista o jogador, você quer que todos os guardas e robôs fiquem em alerta.
No exemplo fictício abaixo, usamos SceneTree.call_group() para alertar todos os inimigos de que o jogador foi avistado.
func _on_player_spotted():
get_tree().call_group("guards", "enter_alert_mode")
public void _OnPlayerDiscovered()
{
GetTree().CallGroup("guards", "enter_alert_mode");
}
O código acima chama a função enter_alert_mode em cada membro do grupo guards.
Para obter a lista completa de nós no grupo guards como uma array, você pode chamar SceneTree.get_nodes_in_group():
var guards = get_tree().get_nodes_in_group("guards")
var guards = GetTree().GetNodesInGroup("guards");
A classe SceneTree fornece muitos métodos úteis para interagir com cenas, suas hierarquias e grupos de nós. Ela permite facilmente trocar ou recarregar cenas, sair do jogo, pausá-lo ou retomá-lo. Ela também oferece sinais úteis.