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 来:
获取某个分组中的节点列表。
在分组中的所有节点上调用方法。
向分组中的所有节点发送通知。
这个功能可以用来组织大型场景、对代码解耦。
管理分组¶
将节点添加到一个新的分组名称中即可创建分组,同样的,将所有节点移出某个给定的分组即为移除分组。
为分组添加/移除节点有两种方法:
设计时,使用编辑器的“节点”面板。
运行时,调用 Node.add_to_group() 或 Node.remove_from_group()。
使用节点面板¶
你可以使用“节点”停靠面板中的“分组”选项卡,将当前场景中的节点加进分组中。

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

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

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

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

它有三列:
当前场景中的节点所用到的分组列表。
不在当前选中的分组中的节点列表。
在分组中的节点列表。
底部的输入框可以用来添加新的分组,或者过滤第二第三列中的节点。
备注
灰色的节点名称意味着这个节点是从别的场景加入该分组的,你无法在这里进行编辑。这种情况一般发生在实例化的场景上。
使用代码¶
你也可以通过脚本来管理分组。以下代码会在脚本所附加的节点进入场景树时,将其加入 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");
}
以上代码会对 gurads
分组中的所有成员调用 enter_alter_mode
函数。
要获取由 guards
分组中的所有节点构成的数组,请调用 SceneTree.get_nodes_in_group():
var guards = get_tree().get_nodes_in_group("guards")
var guards = GetTree().GetNodesInGroup("guards");
SceneTree 类提供了许多有用的方法,例如与场景、其节点层次结构、及节点编组交互。它使你可以轻松切换场景或重新加载场景、退出游戏或暂停和取消暂停游戏。它还提供了一些有用的信号。