物体移速过快导致碰撞检测失灵的穿透问题解决方案

前言

在游戏开发中,当物体移动速度过快时,有可能出现"穿透"现象,这是因为离散的update检测可能跳过了实际的碰撞点。以下是整理的解决方案。

1.连续碰撞检测(CCD)

启用RigidBody的连续碰撞检测(CCD)功能。
连续碰撞检测(简称 CCD)是一种用于避免高速运动的物体在离散运动时出现穿透现象而导致碰撞数据不精确的技术,可用于实现类似高速运动的子弹与物体发生碰撞时,不会直接穿透物体。
要注意不同物理引擎支持的形状不同。

2.子步检测法

在Update的移动逻辑中,将移动细化。比如设置为每帧执行60步,那么就在移动方法中将移速设为1/60,移动60次,并在每次移动后判断碰撞(自定义物理模块)。
其实原理和直接降低每帧运行时间类似,相同的速度执行次数多了自然就更容易检测到了。

3.扫掠体积(Swept Volume)

传统的离散碰撞检测(Discrete Collision Detection, DCD)是基于物体在每一帧的位置进行碰撞判断的。如果物体移动速度过快,在一帧的时间内,它可能直接穿过另一个物体,而离散碰撞检测无法检测到这次碰撞,导致穿透现象。
扫掠体积方法通过考虑物体在一段时间内的运动轨迹,将碰撞检测从离散的点扩展到连续的空间,从而解决了穿透问题。

简单来说就是记录物体移动轨迹的连续空间,与其它物体和扫掠体积进行检测。
要注意的是如果两个扫掠体积有交集不一定是发生了碰撞,有可能刚好错过,这就需要进一步计算了,比如把轨迹按时间子步检测分成更小的空间,检查是否有同时重合等方案。

4.最大速度限制

降低移动速度避免这个问题。

5.射线检测法

从开始处向移动后位置发射射线进行检测。
要注意直接用射线无法检测出两个高速移动物体是否有过交集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我寄人间雪满头丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值