我正在制作一个具有多个场景的游戏,需要有 get_node(来自另一个场景的节点)变量,并且我不知道如何从另一个场景获取节点。
如果我理解正确的话,您想连接到来自另一个场景中的节点的信号。
直接方法会起作用:
const bullet := preload("res://Bullet.tscn")
func create_bullet() -> void:
var instance := bullet.instance()
instance.connect("hit", self, "method")
get_parent().add_child(instance)
# etc
func method() -> void:
# whatever
pass
然而,这并不总是方便。
为了进一步解耦代码,我建议使用信号总线。
见解是物体可以发射其他物体的信号。因此,如果您有一个每个人都可以引用的公共对象,您可以将信号放在那里。
要拥有一个每个人都可以引用的对象,请创建一个自动加载(单例) https://docs.godotengine.org/en/stable/getting_started/step_by_step/singletons_autoload.html。你可以调用它SignalBus
.
在自动加载中有一个脚本,您可以在其中定义信号。例如:
signal hit
然后在需要发出信号的地方执行以下操作:
SignalBus.emit_signal("hit")
要在需要接收它的地方连接到它,请执行以下操作:
func _ready() -> void:
SignalBus.connect("hit", self, "method")
func method() -> void:
# whatever
pass
由于每个场景都可以引用自动加载,因此它们中的任何一个都可以发出信号,并且它们中的任何一个都可以接收信号。他们不需要互相认识。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)