Godot 监听来自同一场景的多个实例的信号
Godot listening to signals from multiple instances of the same scene
我有以下场景:
播放器
敌人
攻击
当攻击与敌人发生碰撞时,敌人会发出“onHit”信号。
播放器监听该信号并弹回。
这一切都很好,但现在如果我复制敌人所以有多个 Enemy 场景,我该如何收听所有这些场景的信号?有没有办法获取场景的所有实例并连接到它们的所有信号?有没有更好的方法将此消息发送回播放器?
我是 Godot 的新手,所以任何建议都非常有帮助!谢谢。
使用信号总线。
是的,您可以遍历节点并找到所有敌人(例如通过比较他们的脚本)。但是,如果所有敌人都将自己注册到 _ready
上的列表(或组)中,会更容易。但是,您不需要这些。
洞察力是这样的:一个物体可以发出其他物体的信号。
我们通过创建信号总线来利用这一点。这是 Godot 中的常见模式。内容如下:
创建一个 autoload (singleton) 脚本。 姑且称它为SignalBus
.
在脚本中,定义信号。没有别的。 *在我们的例子中,我们定义 on_hit
:
signal on_hit
每个需要发出信号的地方都从信号总线发出。 在这种情况下,敌人会这样做:
SignalBus.emit_signal("on_hit")
在需要处理信号的地方,连接到它。例如 _ready
。 像这样:
func _ready() -> void:
SignalBus.connect("on_hit", self, "_on_hit")
func _on_hit() -> void:
# whatever
pass
这样一来,信号的发射器和接收器就不需要相互了解了。他们只需要知道信号总线。随处可用(由于是自动加载)。
我有以下场景: 播放器 敌人 攻击
当攻击与敌人发生碰撞时,敌人会发出“onHit”信号。
播放器监听该信号并弹回。
这一切都很好,但现在如果我复制敌人所以有多个 Enemy 场景,我该如何收听所有这些场景的信号?有没有办法获取场景的所有实例并连接到它们的所有信号?有没有更好的方法将此消息发送回播放器?
我是 Godot 的新手,所以任何建议都非常有帮助!谢谢。
使用信号总线。
是的,您可以遍历节点并找到所有敌人(例如通过比较他们的脚本)。但是,如果所有敌人都将自己注册到 _ready
上的列表(或组)中,会更容易。但是,您不需要这些。
洞察力是这样的:一个物体可以发出其他物体的信号。
我们通过创建信号总线来利用这一点。这是 Godot 中的常见模式。内容如下:
创建一个 autoload (singleton) 脚本。 姑且称它为
SignalBus
.在脚本中,定义信号。没有别的。 *在我们的例子中,我们定义
on_hit
:signal on_hit
每个需要发出信号的地方都从信号总线发出。 在这种情况下,敌人会这样做:
SignalBus.emit_signal("on_hit")
在需要处理信号的地方,连接到它。例如
_ready
。 像这样:func _ready() -> void: SignalBus.connect("on_hit", self, "_on_hit") func _on_hit() -> void: # whatever pass
这样一来,信号的发射器和接收器就不需要相互了解了。他们只需要知道信号总线。随处可用(由于是自动加载)。