Godot Engine 3.2 Alpha2
Godot的组(Group)类似于Unity等引擎中的tag
,但是在Godot中一个节点(Node
)可以加入多个组。在Godot中用组管理和组织场景中的节点是非常方便有效的。
在Godot中创建组以及节点加入组中有两种方式:编辑器方式或者运行时方式。
- 编辑器方式
可以在Group Editor中查看分组情况
- 运行时方式
每一个Node
的子类对象都有add_to_group
方法,可以调用它就可以加入某个组
func _ready():
add_to_group("group_1")
如果要从退出组,则用
remove_from_group("group_1")
组的用途
- 获取组对象
get_tree().get_nodes_in_group("group_name")
- 实现观察者模式
使用组可以非常方便地实现观察者模式,只要让接收某类消息的节点都加入某一个组中即可,然后调用SceneTree
的call_group
方法就可以分发消息了。
get_tree().call_group("group_name","method_name")
注意:
call_group
方法的原型是,其第二个参数后面是动态参数
Variant call_group(group: String, method: String, ...) vararg
- 如果组中某个对象并不包含"method_name"这个方法,也并不会报错,应该是call_group在遍历组成员时先调用了
has_method("method_name")
应用场景举例
假设场景中所有的小怪都加入了"monster"组,你的主角释放了一个大招,要让所有的小怪都收到1点伤害,那么可以这样
get_tree().call_group("monster","hurt",1)
小结 Godot的组和Unity的Tag区别
- 无需预定义,可以动态创建
- 一个Node可以加入若干个组