Node3D全局位置返回nil问题:如何确保正确获取全局坐标?
解决Node3D全局位置返回nil的问题
你的代码存在两个核心问题,直接导致了返回值异常:
- 函数缺少
return语句:get_end()和get_start()仅写了获取位置的表达式,但未用return返回结果。GDScript中,无显式return的函数默认返回nil,这就是你遇到返回nil的根本原因。 is_free_to_land()函数同样缺失return,实际会默认返回nil,而非你预期的true。
修正后的代码如下:
extends Node3D class_name Runway @onready var end_node: Node3D = $End var moving: bool = false func set_moving(new_value: bool): moving = new_value func get_end() -> Vector3: return end_node.global_transform.origin # 添加return返回结果 func get_start() -> Vector3: return get_global_transform().origin # 添加return返回结果 func is_free_to_land(): return true # 添加return返回预期值
额外注意:@onready修饰的end_node会在节点_ready()阶段完成赋值,如果在节点ready前调用get_end(),end_node会处于nil状态,调用其属性也会引发异常。确保调用这些位置获取函数时,节点已完成初始化流程(比如在_ready()之后调用,或场景实例化完成后调用)。
内容的提问来源于stack exchange,提问作者Toasterson
相关产品推荐
相关产品推荐

