如何检测KinematicBody在Godot中与哪个碰撞层发生碰撞



我只是想知道如何检测KinematicBody在代码中与哪个层发生冲突。

我有4层:

播放器

屋顶

地面

墙壁

如何使用代码检查玩家是否与地面层发生碰撞?我使用move_and_slide((来移动我的玩家,所以他们最好的解决方案是我可以使用move_and _slade((的碰撞检测。

您可以使用get_slide_countget_slide_collision获得KinematicBodymove_and_slidemove_and_slide_with_snap运动过程中碰撞的内容。

类似这样的东西:

for index in get_slide_count():
var collision := get_slide_collision(index)
var collider:PhysicsBody = collision.collider
if not is_instance_valid(collider):
continue
# …

现在,既然你说";层";,我想我们谈论的是collision_layer,所以也许你可以做这样的事情:

for index in get_slide_count():
var collision := get_slide_collision(index)
var collider:PhysicsBody = collision.collider
if not is_instance_valid(collider):
continue
if collider.get_collision_layer_bit(3):
# …

3替换为要检查的层的位数


当然,您可以使用其他过滤方式。如节点组:

if collider.is_in_group("Ground"):
# …

类(需要使用class_name Ground设置脚本(:

if collider is Ground:
# …

名称:

if collider.name == "Ground":
# …

等等。


顺便说一句,如果你正在与is_on_floor作斗争,首先,在move_and_slidemove_and_slide_with_snap之后检查它。如果你得到的是间歇性的结果,试着把物理引擎改为";GodotPhysics;关于物理学下的项目设置->3D。

使CCD_ 12与";项目符号"就是要确保地板上总是有一个速度。这提醒了我,您从get_slide_collision获得的碰撞中还有其他信息,包括normal

相关内容

  • 没有找到相关文章

最新更新