项目场景:
使用mac进行Godot3.5引擎开发,主要使用节点RigidBody于Area。检测刚体碰撞并触发log。

问题描述
在使用Godot做刚体(rigidbody)于area碰撞时发现area不起作用的问题。
研究后发现复现方法是首先在场景中放置刚体节点之后再创建area区域,这样的顺序下area是不起作用的。使用同样的节点但是首先在场景中放置area区域之后再放置刚体节点,这样是可以正常检测的。
所以再次经过测试后发现,当area在场景树中的位置位于刚体节点上时,area起作用。但是当area节点在刚体节点下时不起作用。
![]() |
![]() |
![]() |
area节点代码:(其中initPos()方法用来重置进入刚体的位置
func _on_Area_body_entered(body:Node):
if body.get_class() == "RigidBody":
body.initPos()
print("check rigidbody")
print("有物体进入")
原因分析:
area节点在场景树中的顺序决定了是否某些物体起作用
解决方案:
在Godot中当需要用到area节点时,首先创建area节点,保证其在在场景树中的顺序要在需要起作用的节点之上。
猜测:翻阅Godot官方文档,在area中没有找到类似说明,此情形根本原因未知。因为Godot在运行时的运行顺序是从场景树由上至下再向上的,所以猜测按照这个运行路线,area不起作用的情况下,刚体的计算排除了area节点。