碰撞产生的必要条件,两个物体都要有碰撞器,至少一个物体有刚体。
作用
模拟力的作用效果。
组件参数面板
Mass - 质量
决定了物体的质量,默认单位为Kg。质量越大,惯性越大。
根据水平方向动能守恒(理想状态):
惯性越大的物体,在受到同等大小的力的时候受到的影响越小。
Drag- 阻力
物体受力移动时受到的空气阻力
当Drag大于0时,物体的速率会受到Drag的影响逐渐减小,直到为0。
Angular Drag - 角旋转阻力
角旋转时受到的阻力
当AngularDrag大于0时,物体旋转时的角速率会受到AngularDrag影响逐渐减小,直到为0。
Use Gravity - 启用重力
选择是否启用重力
在 Unity3D 中,默认的重力取值为 Vector3(0, -9.81, 0),如果需要更改重力值可以进入 Project Settings → Physics → Gravity 进行设置。(对于 2D 项目,需要进入 Physics 2D 进行更改。)
Is Kinematic - 是否为运动学
控制物体是否使用运动学
当这个打开的时候,物体就只能够通过修改Transform的方式去进行移动。
如果想要物体的运动不受其他力的影响,同时又需要保留Rigidbody属性,可以启用Is Kinematic。
一些不希望受到力的影响的物体包括:提供跳跃功能并且会移动的空中平台、敌人运动时的虚拟形象、以及静态触发器等。
Interpolate - 运动插值
控制是否开启运动插值
让刚体的移动更平滑。当物理帧更新过长的时候,就需要开启这个选项。
物体的物理方面的更新和FixedTimeStep有关,如果这个参数过大,那么物体的运动则会变得非常的生硬。如果开启了运动插值的话,那么即使FixedTimeStep很大,物体的运动看起来也是十分顺滑的。
当物体移动速率过快时,可能会看见物体一闪而过的情况。此时启用Interpolate,物体的移动会变得清晰顺滑,但是此功能一般很少使用。
-
None:不应用插值运算
-
Interpolate:根据前一帧的变换来平滑变换。
-
Extrapolate:根据下一帧的估计变换来平滑变换。
Collision Detection - 碰撞检测模式
用来防止快速移动的对象穿过其他对象而不检测碰撞。
物体之间是否发生碰撞是通过不断进行碰撞检测来判断的。由于这种原理,可能会出现下面这种情况:
红色拉杆快速旋转时穿过蓝色小球
Discrete - 离散碰撞检测
离散碰撞检测在某一个时间段内,碰撞检测的时间点是随机分布的。性能消耗低,最容易穿过去。
对场景中的所有其他碰撞体使用离散碰撞检测,用于正常碰撞(默认值)。
Continuous -连续检测
Continuous Dynamic - 连续动态检测
Continuous和Continuous Dynamic的共同点在于,对待没有刚体和设置为Continuous Dynamic的物体都使用连续碰撞检测,对待设置为Discrete的刚体的物体则使用离散碰撞检测。
不同点在于,Continuous Dynamic检测另一个设置为Continuous的物体时,仍然使用连续碰撞检测模式,而Continuous检测另一个Continuous的物体时,则使用离散碰撞检测。
(同离散,异连续)
这两种方法依赖于连续(线性)扫描技术,因此在物体旋转迅速的情况下,会忽略物体的角速度,仍然可能会穿过墙壁。
Continuous Speculative - 连续推测检测
比连续碰撞检测的成本更低。
在Unity2018.3版本中新添了Continuous Speculative方法,该会根据物体的线性运动和角运动预测物体在不受阻挡时下一步的位置(位置不确定,但是能够被延伸),并根据下一步位置与当前位置划定一个broad-phase axis-aligned的最小包围框。通过算法推测并且选取最小包围框中与墙壁(如果存在)可能发生碰撞的触点并进行记录,并将记录送入解算器,确保球体不会穿过墙壁。由于该算法是基于推测式的方法,所以开销会小于基于扫描式的算法。
性能消耗关系
Continuous Dynamic > Continuous Speculative > Continuous > Discrete
Constraints - 约束
选择时可以约束物体在某一轴上的旋转或移动(世界坐标方向)
锁定了该物体在世界坐标方向上X、Y轴的移动,X轴上的旋转的情况:
示例