Godot中的组(Group)

Godot Engine 3.2 Alpha2

Godot的组(Group)类似于Unity等引擎中的tag,但是在Godot中一个节点(Node)可以加入多个组。在Godot中用组管理和组织场景中的节点是非常方便有效的。

组的创建和加入

在Godot中创建组以及节点加入组中有两种方式:编辑器方式或者运行时方式

  • 编辑器方式

Godot中的组(Group)_第1张图片
可以在Group Editor中查看分组情况

Godot中的组(Group)_第2张图片

  • 运行时方式

每一个Node的子类对象都有add_to_group方法,可以调用它就可以加入某个组

func _ready():
    add_to_group("group_1")

如果要从退出组,则用

remove_from_group("group_1")
组的用途
  • 获取组对象
get_tree().get_nodes_in_group("group_name")
  • 实现观察者模式

使用组可以非常方便地实现观察者模式,只要让接收某类消息的节点都加入某一个组中即可,然后调用SceneTreecall_group方法就可以分发消息了。

get_tree().call_group("group_name","method_name")

注意:

  1. call_group方法的原型是,其第二个参数后面是动态参数
Variant call_group(group: String, method: String, ...) vararg
  1. 如果组中某个对象并不包含"method_name"这个方法,也并不会报错,应该是call_group在遍历组成员时先调用了has_method("method_name")

应用场景举例

假设场景中所有的小怪都加入了"monster"组,你的主角释放了一个大招,要让所有的小怪都收到1点伤害,那么可以这样

get_tree().call_group("monster","hurt",1)

小结
Godot的组和Unity的Tag区别

  1. 无需预定义,可以动态创建
  2. 一个Node可以加入若干个组

你可能感兴趣的:(Godot笔记,#,Godot,基础,Godot,Group,游戏开发)