如何获取另一个场景中的节点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
由于每个场景都可以引用自动加载,因此它们中的任何一个都可以发出并且任何一个都可以接收信号。他们不需要互相认识。
我正在制作一个包含多个场景的游戏,需要有 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
由于每个场景都可以引用自动加载,因此它们中的任何一个都可以发出并且任何一个都可以接收信号。他们不需要互相认识。