网格碰撞体需要正确配置游戏对象的网格,以确保碰撞准确。
有一些特定的配置和优化需要启用网格的读/写。有关“读/写”在此上下文中的含义的详细信息,请参阅有关网格 API 属性 Mesh.isReadable 的文档。
当出现以下任何一种情况时,必须启用网格的读/写功能:
要启用网格读/写,网格的 Mesh.isReadable 值必须为 true。要通过编辑器应用此属性,请执行以下操作:
要计算与网格碰撞体的碰撞,物理系统需要能够访问网格的几何体。“网格烹制”是指将 3D 网格从原始格式(例如 FBX 或 OBJ)转换为物理系统可以读取的格式的过程。烹制过程会获取原始网格数据并构建空间搜索结构,以便 Unity 可以更快地响应物理查询。
您可以在导入设置(导入设置 (Import Settings) > 模型 (Model) > 生成碰撞体 (Generate Colliders))中或在运行时触发网格烹制。
在网格烹制过程中,Unity 可以应用各种优化措施来减小网格的大小和复杂度(例如:删除冗余顶点、合并重叠的三角形或简化几何体以减少三角形的数量)。随后,Unity 能够更快速高效地加载优化后的网格,这有助于减少内存使用并提升整体性能。
若要控制运行哪些优化操作,可使用网格碰撞体的烹制选项属性(对应于 C# 枚举 MeshColliderCookingOptions)。有关可用的不同烹制选项的概述,请参阅网格碰撞体组件参考。
默认的烹制选项适用于在编辑器中烘焙且在运行时无需重新烘焙的任何网格碰撞体。它们也适用于运行时所需的大多数网格碰撞体(特别是只需要烹制一次的大型或复杂网格)。但是,如果需要在运行时快速生成碰撞几何体(例如,程序化表面或根据玩家行为变形的网格碰撞体),可能需要更改烹制选项来加快碰撞体的生成。
要优化 Unity 在运行时所生成网格的网格烹制过程,可以禁用数据清理步骤(启用网格清理和焊接共置顶点)。但是,如果禁用数据清理步骤,必须通过其他方式验证网格数据,以确保不会使用原本会被那些算法清理掉的数据。
您还可以禁用为了更快模拟进行烹制 (Cook For Faster Simulation) 以节省内存使用量。
更改烹制选项时,需要对网格应用读/写权限。有关如何执行此操作的指导,请参阅允许对网格进行读写访问。
如果一个网格仅需为物理计算提供数据,而不用于渲染(例如,对于不可见的碰撞体),那么无需导入该网格的法线信息。没有法线的网格所需的内存更少,占用的磁盘空间也更少。
如要禁用法线: