版本:Unity 6 (6000.0)
语言:English
连续碰撞检测 (CCD)
推测性 CCD

基于扫描的CCD

基于扫描的 CCD 是 **连续** 和 **连续动态** 模式下的 CCD 算法。

对于仅与静止的静态 碰撞体用于处理对象物理碰撞的不可见形状。碰撞体不需要与对象的网格完全相同形状 - 粗略的近似值通常更有效,并且在游戏过程中难以区分。 更多信息
参见 术语表
(即,没有 Rigidbody 组件的游戏对象)发生碰撞的物理体,请使用 **连续** 模式。对于与移动的动态碰撞体(即,具有动态 Rigidbody 组件的游戏对象)发生碰撞的物理体,请使用 **连续动态** 模式。

**连续** 和 **连续动态** 是最精确的 碰撞当物理引擎检测到两个游戏对象的碰撞体接触或重叠时,就会发生碰撞,前提是至少有一个具有 Rigidbody 组件并且处于运动状态。 更多信息
参见 术语表
检测模式。但是,它们也是计算量最大的模式。此外,它们仅适用于因线性运动而发生的碰撞;它们无法检测因物理体旋转而发生的碰撞(例如,弹球发射器在枢轴上旋转时与球体发生碰撞)。

了解基于扫描的CCD

基于扫描的 CCD 使用时间冲击 (TOI) 算法来计算潜在的碰撞。为此,该算法会沿着对象当前速度下的前进轨迹“扫描”或检测。

Sweep-based collision detection, from one timestep to the next. See the legend below for details.
从一个时间步长到下一个时间步长的基于扫描的碰撞检测。有关详细信息,请参见下面的图例。

在上图中

  • A:对象在起始位置
  • B:基于对象当前速度预测的对象在现在到下一个时间步长之间将穿过的区域
  • C:一个物理时间步长后对象的新位置

如果在对象移动方向上存在接触,则算法计算冲击时间,并将对象移动到该时间。该算法可以从此时间开始执行子步;最重要的是,它可以在冲击后重新计算速度,然后沿着新的轨迹重新扫描。

Sweep-based collision detection, when the algorithm detects an obstacle. See legend below for details.
当算法检测到障碍物时,基于扫描的碰撞检测。有关详细信息,请参见下面的图例。

在上图中

  • A:对象在起始位置
  • B:基于扫描的 CCD 算法预测碰撞的对象所在位置
  • C:一个物理时间步长后的原始预测位置
  • D:基于扫描的 CCD 算法检测到的中断线性路径的碰撞体

基于扫描的 CCD 会对性能产生重大影响,尤其是在项目中广泛使用时。如果大量高速对象使用基于扫描的 CCD 并且彼此靠近,则 CCD 开销会迅速增加,因为 物理引擎模拟物理系统各个方面的系统,以便对象可以正确加速并受到碰撞、重力和其它力的影响。 更多信息
参见 术语表
必须执行更多扫描和更多 CCD 子步。

基于扫描的 CCD 的一个限制是它只能执行线性(或方向性)扫描,而不能执行角(或旋转)扫描,这意味着它无法预测物理体旋转时可能发生的碰撞。例如,弹球机中的发射器固定在一端,并围绕一个固定点旋转;它只有角运动,没有线性运动。如果您还需要考虑对象的旋转,请使用推测性 CCD。

连续碰撞检测 (CCD)
推测性 CCD