复合碰撞体是同一刚体游戏对象上的碰撞体集合。
复合碰撞体的整体行为类似于单个刚体碰撞体。当需要精确的凹面形状碰撞体时,或者当模型计算量太高而无法用网格碰撞体进行模拟时,复合碰撞体将非常有用。
复合碰撞体由以下元素组成:
复合碰撞体只能有一个刚体,该刚体应位于根游戏对象上。
有关如何创建复合碰撞体的更多信息,请参阅创建复合碰撞体。
在上图中,游戏对象枪支模型有一个附加到父游戏对象的刚体和多个子游戏对象,每个子游戏对象有一个原始碰撞体。当刚体父对象在物理力作用下移动时,子碰撞体会随之移动。原始碰撞体可与环境中的其他碰撞体发生碰撞,父刚体会根据这些碰撞改变其移动方式。
与包含一个刚体和多个碰撞体的单个游戏对象相比,此配置具有更大的灵活性。当每个碰撞体位于不同的游戏对象上时,可以单独修改每个碰撞体的变换 (Transform) 组件。但是,在重新定位碰撞体时,应监控刚体的行为。更改碰撞体的位置和比例可能会改变刚体的质心,如果在运行时连续更改多个帧,则可能会导致一些意外行为。如果发生这种情况,可使用 rigidbody.centerOfMass 手动设置质心。
将多个碰撞体附加到同一刚体时,物理系统会将整个集合视为单个刚体碰撞体。碰撞体类型(动态或运动)由刚体配置确定。
当复合碰撞体接触到另一个碰撞体时,Unity 会为复合体中的每个碰撞体分别记录碰撞。因此,应尝试排列好碰撞体,以便在运行时仅获得所需的碰撞对,或使用碰撞体标签来确定由特定碰撞体引起的行为。
在大多数情况下,复合碰撞体提供的解决方案与网格碰撞体类似:其主要目的是为形状复杂的物体提供准确的碰撞。在考虑复合碰撞体的优点和局限性时,通常会将其与网格碰撞体进行比较。
复合碰撞体的主要优点是:
但是,复合碰撞体也有一些明显的局限性:
此决策总是因项目而异,因此应该测试每种配置,并使用物理性能分析器 (Physics Profiler) 来了解碰撞体设置的效率。