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