如何获取另一个场景中的节点godot?

How to get a node in another scene godot?

我正在制作一个包含多个场景的游戏,需要有 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

然而,这并不总是很方便。


为了进一步分离代码,我建议使用信号总线。

洞察力是物体可以发出其他物体的信号。因此,如果你有一个每个人都可以参考的共同对象,你可以把你的信号放在那里。

要拥有一个每个人都可以引用的对象,请创建一个 autoload (singleton)。你可以称它为 SignalBus.

在定义信号的自动加载中有一个脚本。例如:

signal hit

然后在需要发出信号的地方,这样做:

SignalBus.emit_signal("hit")

要在需要接收它的地方连接到它,请执行以下操作:

func _ready() -> void:
    SignalBus.connect("hit", self, "method")

func method() -> void:
    # whatever
    pass

由于每个场景都可以引用自动加载,因此它们中的任何一个都可以发出并且任何一个都可以接收信号。他们不需要互相认识。