Mesh Collider 采用网格资源并基于该网格构建其碰撞体。在进行碰撞检测时,Mesh Collider 比使用复杂网格的基元要准确得多。标记为 Convex 的 Mesh Collider 可与其他 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 | 引用需要用于碰撞的网格。 |
Mesh Collider 从附加到游戏对象的网格构建其碰撞表示,并读取附加的变换组件的属性以正确设置其位置和缩放。这样做的好处是可以使碰撞体的形状与游戏对象可见网格的形状完全相同,从而产生更精确和真实的碰撞。但是,伴随这种精度的不足之处是,与涉及原始碰撞体(例如球体、盒体和胶囊体)的碰撞相比,处理开销会更高,因此最好谨慎使用 Mesh Collider。
碰撞网格中的面为单面。这意味着,对象可从一个方向穿过这些面,但从另一个方向会与这些面碰撞。
网格烹制将常规网格更改为可以在物理引擎中使用的网格。烹制会构建用于物理查询的空间搜索结构(如 Physics.Raycast)以及用于接触生成的支持结构。Unity 在碰撞检测中使用网格之前烹制所有这些网格。这可在导入时 (Import Settings > Model > Generate Colliders) 或运行时进行。
如果要在运行时生成网格(例如,对于程序化表面),设置 Cooking Options 以更快地生成结果并禁用清理过程的其他数据清理步骤将非常有用。缺点是需要生成无退化三角形和非同位顶点,但烹制的运行速度更快。
如果禁用 Enable Mesh Cleaning 或 Weld Colocated Vertices__,则需要确保未使用那些算法在其他情况下可能会过滤的数据。如果禁用了 Weld Colocated Vertices__,请确保没有任何同位顶点,如果启用了 __Enable Mesh Cleaning__,确保没有面积接近零的小三角形,没有狭长的三角形,也没有面积接近于无限大的大三角形。
注意:将 Cooking Options 设置为除默认设置之外的任何其他值意味着 Mesh Collider 必须使用一个 isReadable 值为 true 的网格。
使用 Mesh Collider 时有一些限制:
未启用 Convex 的 Mesh Collider 仅在没有 Rigidbody 组件的游戏对象上受支持。要将 Mesh Collider 应用于 Rigidbody 组件,请勾选 Convex 复选框。
要使 Mesh Collider 正常工作,网格必须在以下情况下设置为 read/write enabled:
优化技巧:__如果网格仅由 Mesh Collider 使用,则可以在 Import Settings__ 中禁用 __Normals__,因为物理系统不需要它们。