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

T-R*_*Rex 3 gdscript godot

我正在制作一个具有多个场景的游戏,并且需要具有 get_node(来自另一个场景的节点)的变量,并且我不知道如何从另一个场景获取节点。

The*_*aot 5

如果我理解正确的话,您想连接到来自另一个场景中的节点的信号。


直接方法可行:

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
Run Code Online (Sandbox Code Playgroud)

然而,这并不总是方便。


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

见解是物体可以发出其他物体的信号。因此,如果您有一个每个人都可以引用的公共对象,您可以将信号放在那里。

要拥有每个人都可以引用的对象,请创建一个自动加载(单例)。你可以调用它SignalBus

在自动加载中有一个脚本,您可以在其中定义信号。例如:

signal hit
Run Code Online (Sandbox Code Playgroud)

然后在需要发出信号的地方执行以下操作:

SignalBus.emit_signal("hit")
Run Code Online (Sandbox Code Playgroud)

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

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

func method() -> void:
    # whatever
    pass
Run Code Online (Sandbox Code Playgroud)

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