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 来:

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

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

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

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

管理分组

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

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

使用节点面板

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

../../_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 类提供了许多有用的方法,例如与场景、场景节点层次结构及节点编组交互,还可以使你可以轻松切换场景或重新加载场景、退出游戏或暂停和恢复运行游戏。不仅如此,该类还提供了一些有用的信号。