地形碰撞体与地形的形状完全匹配,从而实现极其准确的地形碰撞模拟。地形碰撞体是用于地形的最准确的碰撞体类型。
与原始碰撞体和网格碰撞体不同,地形碰撞体基于高度贴图。PhysX 从相应地形的高度贴图数据而不是预定义的形状或网格生成地形碰撞体。
有关 PhysX 中基于高度贴图的碰撞体的详细信息,请参阅 Nvidia PhysX 文档几何体:高度字段。
地形碰撞体构建其碰撞几何体来匹配分配的 TerrainData 资源的高度贴图数据,包括其形状、位置和缩放。这样做的好处是可以使碰撞体的形状与可见地形的形状完全相同,从而产生更精确和真实的碰撞。
地形有两种向地形添加预制件的笔刷类型:树 (Trees) 和细节 (Details)。使用这些笔刷可以快速添加树木、灌木丛、岩石和其他地形细节。有关更多详细信息,请参阅有关笔刷、树以及草和其他细节的地形文档。
创建预制件时,需要向该预制件添加任何所需的碰撞体。使用树笔刷将该预制件应用于地形时,需要使用地形碰撞体来启用或禁用这些碰撞体。在地形碰撞体上,使用启用树碰撞体 (Enable Tree Colliders) 切换树预制件碰撞体。
地形碰撞体仅为使用树笔刷添加的预制件生成碰撞体。它不会为使用细节笔刷添加的预制件生成碰撞体,因为细节笔刷仅渲染预制件的网格,而不渲染其碰撞体。如果希望地形游戏对象上的某个对象具有碰撞体,请使用树笔刷添加。
Unity 仅在运行时生成树预制件碰撞体,因此它们仅在运行时出现在物理调试 (Physics Debug) 碰撞体几何 (Collider Geometry) 视图中。
地形碰撞体是几乎所有情况下均适用于地形的正确碰撞体选择。地形碰撞体可以准确表示地形的形状,从而实现地形与其他碰撞体之间的精确碰撞检测。地形碰撞体也只需要最少的设置和配置时间,因为 Unity 会在创建地形时自动生成地形碰撞体。
如果您正在寻找提高性能的机会,可以尝试另一种方法来处理地形碰撞,但前提是地形具有较大的平坦区域,或者物理碰撞不需要非常准确。以下部分将介绍两种替代方法。
您可以创建具有较低分辨率的 TerrainData 资源,并将其应用于地形碰撞体。
复制地形的现有 TerrainData 资源,并降低分辨率。将地形碰撞体的地形数据 (TerrainData) 字段设置为分辨率降低的 TerrainData 资源。
请注意,Unity 在地形检视面板 (Terrain Inspector) 上显示一条警告,指出碰撞体和地形具有不同的 TerrainData 资源,但只要是有意这样操作,就可以忽略此警告。
您可以导出地形的高度贴图并使用外部软件将其转换为简化的网格碰撞体。
安装 Terrain Tools 包。使用导出高度贴图 (Export Heightmap) 工具导出地形高度贴图。使用 3D 建模软件从高度贴图创建网格。使用 3D 建模软件在网格上运行网格简化例程。将网格重新导入 Unity 以用作网格碰撞体的源。