最近又开始玩 godot engine ,遇到了一个问题: get_node 无法通过绝对路径获取相邻节点
假设有根节点 root,包含两个子节点 a 和 b,在 a 节点的 _ready 函数中,无法用 get_node 获取到 b 节点:
var b # b 节点
func _ready():
var r = get_node("/root") # 可以获取到 root
b = get_node("/root/b") # 空
做了一些试验后,发现是这样一回事: a 节点执行 _ready() 时,b 节点还没有加入 root
由于 godot 的节点顺序是可以修改的,把 b 节点移动到 a 节点之前,问题是否可以解决呢?
答案是否定的,结果跟之前相同
所以推测 godot 加入节点的顺序并不是自上而下的,那么我们如何引用相邻节点呢? 这时其实答案已经一目了然了,我们需要在 root 的 _ready 函数中把 b 节点的引用交给 a, 简单的做法是直接赋值:
func _ready():
get_node("a").b = get_node("b")
_ready 这个函数只表示 该节点已就绪 ,相邻节点是否就绪未知,同时我们可以推论出, 当父节点就绪时,子节点均已就绪