unity 物理系统学习
这里做到了mesh寻路,发现对物理系统的某些概念还不是很了解,所以来记录一下
1.刚体
实现游戏对象的物理行为的主要组件。连接刚体后,对象将立即响应重力
Mass | 对象的质量(默认为千克)。 |
Drag | 根据力移动对象时影响对象的空气阻力大小。0 表示没有空气阻力,无穷大使对象立即停止移动。 |
Angular Drag | 根据扭矩旋转对象时影响对象的空气阻力大小。0 表示没有空气阻力。请注意,如果直接将对象的 Angular Drag 属性设置为无穷大,无法使对象停止旋转。 |
Use Gravity | 如果启用此属性,则对象将受重力影响。 |
Is Kinematic | 如果启用此选项,则对象将不会被物理引擎驱动,只能通过__变换 (Transform)__ 对其进行操作。对于移动平台,或者如果要动画化附加了 HingeJoint 的刚体,此属性将非常有用。 |
Interpolate | 仅当在刚体运动中看到急动时才尝试使用提供的选项之一。 |
- None | 不应用插值。 |
- Interpolate | 根据前一帧的变换来平滑变换。 |
- Extrapolate | 根据下一帧的估计变换来平滑变换。 |
Collision Detection | 用于防止快速移动的对象穿过其他对象而不检测碰撞。 |
- Discrete | 对场景中的所有其他碰撞体使用离散碰撞检测。其他碰撞体在测试碰撞时会使用离散碰撞检测。用于正常碰撞(这是默认值)。 |
- Continuous | 对动态碰撞体(具有刚体)使用离散碰撞检测,并对静态碰撞体(没有刚体)使用基于扫掠的连续碰撞检测。设置为__连续动态 (Continuous Dynamic)__ 的刚体将在测试与该刚体的碰撞时使用连续碰撞检测。其他刚体将使用离散碰撞检测。用于__连续动态 (Continuous Dynamic)__ 检测需要碰撞的对象。(此属性对物理性能有很大影响,如果没有快速对象的碰撞问题,请将其保留为 Discrete 设置) |
- Continuous Dynamic | 对设置为__连续 (Continuous)__ 和__连续动态 (Continuous Dynamic)__ 碰撞的游戏对象使用基于扫掠的连续碰撞检测。还将对静态碰撞体(没有刚体)使用连续碰撞检测。对于所有其他碰撞体,使用离散碰撞检测。用于快速移动的对象。 |
- Continuous Speculative | 对刚体和碰撞体使用推测性连续碰撞检测。这也是可以设置运动物体的唯一 CCD 模式。该方法通常比基于扫掠的连续碰撞检测的成本更低。 |
Constraints | 对刚体运动的限制: |
- Freeze Position | 有选择地停止刚体沿世界 X、Y 和 Z 轴的移动。 |
- Freeze Rotation | 有选择地停止刚体围绕局部 X、Y 和 Z 轴旋转。 |
2.碰撞盒
组件定义对象的形状以便用于物理碰撞
2.1 盒型
属性: | 功能: |
---|---|
Is Trigger | 如果启用此属性,则该碰撞体将用于触发事件,并被物理引擎忽略。 |
Material | 引用物理材质,可确定该碰撞体与其他对象的交互方式。 |
Center | 碰撞体在对象局部空间中的位置。 |
Size | 碰撞体在 X、Y、Z 方向上的大小。 |
2.2 胶囊
属性: | 功能: |
---|---|
Is Trigger | 如果启用此属性,则该碰撞体将用于触发事件,并被物理引擎忽略。 |
Material | 引用物理材质,可确定该碰撞体与其他对象的交互方式。 |
Center | 碰撞体在对象局部空间中的位置。 |
Radius | 碰撞体的局部宽度的半径。 |
Height | 碰撞体的总高度。 |
Direction | 胶囊体在对象局部空间中纵向方向的轴。 |
2.3 mesh Collider
属性 | 功能 | |
---|---|---|
Convex | 勾选此复选框可启用 Convex。如果启用此属性,该 Mesh Collider 将与其他 Mesh Collider 发生碰撞。Convex Mesh Collider 最多 255 个三角形。 | |
Is Trigger | 如果启用此属性,则 Unity 使用该碰撞体来触发事件,而物理引擎会忽略该碰撞体。 | |
Cooking Options | 启用或禁用影响物理引擎对网格处理方式的网格烹制选项。 | |
None | 禁用下方列出的所有 Cooking Options。 | |
Everything | 启用下方列出的所有 Cooking Options。 | |
Cook for Faster Simulation | 使物理引擎烹制网格以加快模拟速度。启用此设置后,这会运行一些额外步骤,以保证生成的网格对于运行时性能是最佳的。这会影响物理查询和接触生成的性能。禁用此设置后,物理引擎会使用更快的烹制速度,并尽可能快速生成结果。因此,烹制的 Mesh Collider 可能不是最佳的。 | |
Enable Mesh Cleaning | 使物理引擎清理网格。启用此设置后,烹制过程会尝试消除网格的退化三角形以及其他几何瑕疵。此过程生成的网格更适合于在碰撞检测中使用,往往可生成更准确的击中点。 | |
Weld Colocated Vertices | 使物理引擎在网格中删除相等的顶点。启用此设置后,物理引擎将合并具有相同位置的顶点。这对于运行时发生的碰撞反馈十分重要。 | |
Material | 引用物理材质,可确定该碰撞体与其他对象的交互方式。 | |
Mesh | 引用需要用于碰撞的网格。 |
碰撞检测
基于扫掠的 CCD
基于扫掠的 CCD 采用撞击时间 (TOI) 算法,通过扫掠对象的前向轨迹来计算对象的潜在碰撞(采用对象的当前速度)。如果沿对象移动方向有接触,该算法会计算撞击时间并移动对象直至达到该时间。该算法可从该时间开始执行子步骤,即计算 TOI 之后的速度,然后重新扫掠,代价是需要经历更多的 CPU 周期。
因为此方法依赖于线性扫掠,所以会忽略物体的角运动,这在对象迅速旋转时会引起穿隧效应。
基于推断的 CCD
推断性 CCD 的工作原理是基于对象的线性运动和角运动增大一个对象的粗筛阶段轴对齐最小包围盒 (AABB)。推测性 CCD 可能会导致幽灵碰撞;
推测性 CCD 还可能导致发生穿隧,因为只会在碰撞检测阶段计算推测性触点。
3.关节
链条,弹簧
2.角色控制器
第一人称或第三人称游戏中的角色通常需要一些基于碰撞的物理效果,这样角色就不会跌穿地板或穿过墙壁。
属性: | 功能: |
---|---|
Slope Limit | 将碰撞体限制为爬坡的斜率不超过指示值(以度为单位)。 |
Step Offset | 仅当角色比指示值更接近地面时,角色才会升高一个台阶。该值不应该大于角色控制器的高度,否则会产生错误。 |
Skin width | 两个碰撞体可以穿透彼此且穿透深度最多为皮肤宽度 (Skin Width)。较大的皮肤宽度可减少抖动。较小的皮肤宽度可能导致角色卡住。合理设置是将此值设为半径的 10%。 |
Min Move Distance | 如果角色试图移动到指示值以下,根本移动不了。此设置可以用来减少抖动。在大多数情况下,此值应保留为 0。 |
Center | 此设置将使胶囊碰撞体在世界空间中偏移,并且不会影响角色的枢转方式。 |
Radius | 胶囊碰撞体的半径长度。此值本质上是碰撞体的宽度。 |
Height | 角色的__胶囊碰撞体__高度。更改此设置将在正方向和负方向沿 Y 轴缩放碰撞体。 |