分组

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

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

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

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

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

管理分组

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

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

使用节点面板

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

../../_images/groups_node_tab.png

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

../../_images/groups_add_node_to_group.png

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

../../_images/groups_node_after_adding.png

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

../../_images/groups_manage_groups_button.png

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

../../_images/groups_group_editor_window.png

它有三列:

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

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

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

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

备注

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

使用代码

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

GDScriptC#

  1. func _ready():
  2. add_to_group("guards")
  1. public override void _Ready()
  2. {
  3. base._Ready();
  4. AddToGroup("guards");
  5. }

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

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

GDScriptC#

  1. func _on_Player_spotted():
  2. get_tree().call_group("guards", "enter_alert_mode")
  1. public void _OnPlayerDiscovered()
  2. {
  3. GetTree().CallGroup("guards", "enter_alert_mode");
  4. }

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

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

GDScriptC#

  1. var guards = get_tree().get_nodes_in_group("guards")
  1. var guards = GetTree().GetNodesInGroup("guards");

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