Version: Unity 6.0 (6000.0)
语言 : 中文
网格碰撞体
为网格碰撞体准备网格

网格碰撞体简介

网格碰撞体网格的形状完全一致,从而实现极其精确的碰撞模拟。

网格碰撞体可构建其碰撞几何体来匹配分配的网格,包括其形状、位置和比例。这样做的好处是可以使碰撞体的形状与游戏对象可见网格的形状完全相同,从而产生更精确和真实的碰撞。

因为网格碰撞体具有精确性,所以处理开销要高于基元碰撞体(例如球体盒体胶囊体碰撞体)。因此,最佳做法是仅在两种情况下使用网格碰撞体,一是碰撞体对于处理能力的要求不高,二是使用基元碰撞体或复合碰撞体模拟碰撞会产生更多开销。一种比较好的方法是将网格碰撞体用于静态场景几何体,将复合碰撞体用于移动游戏对象。

网格碰撞体的优点和局限性

在大多数情况下,网格碰撞体提供与复合碰撞体类似的解决方案:主要是为具有复杂形状的物体提供精准的碰撞。在考虑网格碰撞体的优点和局限性时,通常要将其与复合碰撞体进行比较。

网格碰撞体的主要优点如下:

  • 网格碰撞体极其精准,因为其与物体的形状完全一致。
  • 与复合碰撞体相比,网格碰撞体所需的手动开发时间更少,因为 Unity 会根据网格的形状自动处理形状。
  • 在某些情况下,网格碰撞体可能比复合碰撞体在计算方面要求更低。对于复杂的形状而言,需要大量复合碰撞体才能模拟,因而通常使用网格碰撞体。一个网格碰撞体可能比几个基元碰撞体更高效。

但是,网格碰撞体也有一些显著的局限性:

  • 网格碰撞体无法在凹面形状之间提供精准的碰撞。有关详细信息,请参阅下方的凹面和凸面网格碰撞体
  • 在某些情况下,复合碰撞体可能比网格碰撞体在计算方面要求更低。对于比较简单的形状而言,只需要几个碰撞体就能模拟,或者在不需要形状很精确的情况下,通常会使用复合碰撞体。例如,网格碰撞体可能会生成数百个多边形来精确匹配复杂的形状,但如果使用基元碰撞体来模拟,需要的多边形可能会少很多。
  • 对于在运行时改变形状的网格,网格碰撞体不是很好的选择。有关详细信息,请参阅下文在运行时改变形状的网格

您需要根据项目的具体情况做出决定,所以您应该测试每种配置并使用物理性能分析器 (Physics Profiler) 来了解碰撞体设置的效率。

凹面和凸面网格碰撞体

网格碰撞体的行为会因标记为凹面还是凸面而异。默认情况下,PhysX 会将网格碰撞体视为凹面。

在数学中,“凹面”和“凸面”是用于描述形状的术语:

凸面形状只有向外弯曲的线条(例如,球)。连接边界上两点的任何线段全都在形状内。凹面形状至少有一个边界向内弯曲的“坑洞”或凹陷(例如,香蕉)。连接边界上两点的线段有时会穿过形状外部的空间。

凹面碰撞体有一些局限性:凹面网格碰撞体只能是静态的(即没有物理体)或运动性的(有运动物理体)。请参阅碰撞体类型以了解更多详细信息。凹面网格碰撞体只能与凸面碰撞体碰撞。两个凹面碰撞体接触时不会发生碰撞。

如果您有两个需要碰撞的凹面网格碰撞体,则可以执行以下操作之一,具体取决于碰撞的精度要求:

如果不需要在形状的凹面部分发生精准的碰撞,请在检视面板中将其中一个网格碰撞体标记为凸面(启用是凸面 (Is Convex))。这会生成一个新的凸面碰撞体形状,称为“外壳”,这类似于分配的凹面网格,但所有凹面线条被填充了,使其成为了凸面。

香蕉形游戏对象上的凹面网格碰撞体。
香蕉形游戏对象上的凹面网格碰撞体。
同一香蕉形游戏对象上的凸面网格碰撞体。
同一香蕉形游戏对象上的凸面网格碰撞体。

如果需要在形状的凹面部分发生准确的碰撞,请使用由凸面碰撞体组成的复合碰撞体

在运行时改变形状的网格

分配给网格碰撞体的网格最好在运行时不会改变形状。

每次网格改变形状时,物理引擎都需要重新计算网格碰撞体几何体,这会导致巨大的性能开销。因此,不应修改网格碰撞体使用的网格的几何体。如果网格需要在运行时同时碰撞和改变形状,通常最好使用基元碰撞体复合碰撞体来模拟网格形状。

面向方向网格

碰撞网格中的面为单面。这意味着,游戏对象可从一个方向穿过这些面,但从另一个方向会与这些面碰撞。

有关网格碰撞体使用的基础算法和数据结构的详细信息,请参阅 Nvidia PhysX 关于几何体的文档。

网格碰撞体
为网格碰撞体准备网格