【求助】 关于kinematicbody3d 检测 _is_on_floor 的问题
godot吧
全部回复
仅看楼主
level 3
island1985 楼主
场景很简单。一个static的地面,一个kinematic3d 的球,脚本如下,碰撞也设置好了,空中一切正常,但小球落地停止后仍按顺序反复打印:
1我在空中 2我在地下,(虽可以设一个bool变量在落地后停止这种重复打印)求解惑这是为什么,,碰撞安全距离都是0.0001
extends KinematicBody
var grivyty = -5
var vp = Vector3(0,1,0)
var motion = Vector3()
func _process(delta):
anim(delta)
move_and_slide(motion,vp)
func anim(delta):
if not is_on_floor():
motion.y = grivyty
print("我在空中")
else:
motion.y = 0
print("我在地下")
2020年01月08日 03点01分 1
level 3
island1985 楼主
追加一个问题,如何在信息面板吧重复的 print(xxxx)信息像unity那样按次数折叠起来?
2020年01月08日 03点01分 2
吧务
level 14
[惊讶]可以通过断点调试来查看代码运行时进入了哪个判断
根据断点调试,is_on_floor()在检测到落地后,如果将下落速度设置为0,那么下次检测就会判断为“没有落地”
也就是说,如果在落地时把下落速度归0,就会产生“落地”和“没落地”的交替输出
[委屈]至于怎么折叠重复的控制台输出,目前我也没有找到相关的案例,个人猜测可能目前没有这个功能
2020年01月08日 08点01分 3
多谢楼主解惑。。。这多半是个BUG了,我是打算使用godot做3D游戏的
2020年01月08日 14点01分
@island1985 [勉强]与其说是BUG,不如说是碰撞检测的一些套路,之前我在2D的时候写过最简单的碰撞检测,方法是通过移动速度来判断接下来是否会和碰撞区域相交,如果移动速度为0,表示接下来就不会碰撞到物体。我估计godot也是采用了类似的方法,因此如果下落速度归零,就判断为不会碰撞到地面
2020年01月09日 07点01分
1