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.

分组

Godot 中的分组与其他软件中的标签类似。你可以将节点加入任意数量的你想要的分组之中。然后在代码中,你可以使用 SceneTree 来:

  • 获取某个分组中的节点列表。

  • 在分组中的所有节点上调用方法。

  • 向分组中的所有节点发送通知。

这个功能可以用来组织大型场景、对代码解耦。

管理分组

将节点添加到一个新的分组名称中即可创建分组,同样的,将所有节点移出某个给定的分组即为移除分组。

为分组添加/移除节点有两种方法:

使用节点面板

你可以使用“节点”停靠面板中的“分组”选项卡,将当前场景中的节点加进分组中。

../../_images/groups_node_tab.webp

在“场景”面板中选中若干个节点,在输入框中填写分组名称,然后单击“添加”。

../../_images/groups_add_node_to_group.webp

现在你就应该会看到出现了分组。

../../_images/groups_node_after_adding.webp

在复杂的项目中,你可能会用到很多包含许多节点的分组或者大型场景。你可以使用“分组编辑器”窗口来为分组添加或删除节点。这个窗口可以通过点击“管理分组”按钮打开。

../../_images/groups_manage_groups_button.webp

出现“分组编辑器”窗口。这是一个复杂项目中的截图,用于展示这个工具的用途。

../../_images/groups_group_editor_window.webp

它有三列:

  1. 当前场景中的节点所用到的分组列表。

  2. 不在当前选中的分组中的节点列表。

  3. 在分组中的节点列表。

底部的输入框可以用来添加新的分组,或者过滤第二第三列中的节点。

备注

灰色的节点名称意味着这个节点是从别的场景加入该分组的,你无法在这里进行编辑。这种情况一般发生在实例化的场景上。

使用代码

你也可以通过脚本来管理分组。以下代码会在脚本所附加的节点进入场景树时,将其加入 guards(守卫)分组。

func _ready():
    add_to_group("guards")

请想象你正在制作潜入类游戏。敌人发现玩家后,你会希望所有守卫和机器人都进入警觉状态。

下面的虚拟例子中,我们使用 SceneTree.call_group() 来通知所有敌人,玩家被发现了。

func _on_player_spotted():
    get_tree().call_group("guards", "enter_alert_mode")

以上代码会对 gurads 分组中的所有成员调用 enter_alter_mode 函数。

要获取由 guards 分组中的所有节点构成的数组,请调用 SceneTree.get_nodes_in_group()

var guards = get_tree().get_nodes_in_group("guards")

SceneTree 类提供了许多有用的方法,例如与场景、其节点层次结构、及节点编组交互。它使您可以轻松切换场景或重新加载场景、退出游戏或暂停和取消暂停游戏。它还提供了一些有用的信号。