Version: Unity 6.0 (6000.0)
语言 : 中文
网格碰撞体简介
网格碰撞器组件参考

为网格碰撞体准备网格

网格碰撞体需要正确配置游戏对象的网格,以确保碰撞准确。

允许对网格进行读写访问

有一些特定的配置和优化需要启用网格的读/写。有关“读/写”在此上下文中的含义的详细信息,请参阅有关网格 API 属性 Mesh.isReadable 的文档。

当出现以下任何一种情况时,必须启用网格的读/写功能:

  • 附加的网格碰撞体的变换组件具有负缩放(例如 (–1, 1, 1))并且网格为凸面。
  • 附加的网格碰撞体的变换组件是倾斜或截断的(例如,当旋转的变换组件具有缩放的父变换组件时)。
  • 附加的网格碰撞体的烹制选项 (Cooking Options)(请参阅配置网格烹制)设置为默认值以外的任何值(即,除 None 之外全部启用)。

对网格启用读/写

要启用网格读/写,网格的 Mesh.isReadable 值必须为 true。要通过编辑器应用此属性,请执行以下操作:

  1. 在项目 (Project) 窗口中,选择包含网格的模型文件(例如 FBX 文件)。
  2. 在检视面板 (Inspector) 中,选择模型 (Model)
  3. 网格 (Meshes) 部分中,启用读/写 (Read/Write)

配置网格烹制

要计算与网格碰撞体的碰撞,物理系统需要能够访问网格的几何体。“网格烹制”是指将 3D 网格从原始格式(例如 FBX 或 OBJ)转换为物理系统可以读取的格式的过程。烹制过程会获取原始网格数据并构建空间搜索结构,以便 Unity 可以更快地响应物理查询。

您可以在导入设置(导入设置 (Import Settings) > 模型 (Model) > 生成碰撞体 (Generate Colliders))中或在运行时触发网格烹制。

在运行时优化网格烹制

在网格烹制过程中,Unity 可以应用各种优化措施来减小网格的大小和复杂度(例如:删除冗余顶点、合并重叠的三角形或简化几何体以减少三角形的数量)。随后,Unity 能够更快速高效地加载优化后的网格,这有助于减少内存使用并提升整体性能。

若要控制运行哪些优化操作,可使用网格碰撞体的烹制选项属性(对应于 C# 枚举 MeshColliderCookingOptions)。有关可用的不同烹制选项的概述,请参阅网格碰撞体组件参考

默认的烹制选项适用于在编辑器中烘焙且在运行时无需重新烘焙的任何网格碰撞体。它们也适用于运行时所需的大多数网格碰撞体(特别是只需要烹制一次的大型或复杂网格)。但是,如果需要在运行时快速生成碰撞几何体(例如,程序化表面或根据玩家行为变形的网格碰撞体),可能需要更改烹制选项来加快碰撞体的生成。

要优化 Unity 在运行时所生成网格的网格烹制过程,可以禁用数据清理步骤(启用网格清理焊接共置顶点)。但是,如果禁用数据清理步骤,必须通过其他方式验证网格数据,以确保不会使用原本会被那些算法清理掉的数据。

  • 如果启用网格清理 (Enable Mesh Cleaning) 被禁用,必须确保网格没有退化三角形(例如,顶点共线的细长三角形,或面积接近零或无穷大的三角形)。
  • 如果焊接共置顶点 (Weld Colocated Vertices) 被禁用,必须确保网格没有共置顶点(即,即多个顶点位于同一位置 )。

您还可以禁用为了更快模拟进行烹制 (Cook For Faster Simulation) 以节省内存使用量。

更改烹制选项时,需要对网格应用读/写权限。有关如何执行此操作的指导,请参阅允许对网格进行读写访问

优化非渲染网格

如果一个网格仅需为物理计算提供数据,而不用于渲染(例如,对于不可见的碰撞体),那么无需导入该网格的法线信息。没有法线的网格所需的内存更少,占用的磁盘空间也更少。

如要禁用法线:

  1. 在项目 (Project) 窗口中,选择网格 (Mesh)。
  2. 在检视面板 (Inspector) 的导入 (Import) 设置中,选择模式 (Model)
  3. 导航到几何体 (Geometry) 部分并将法线 (Normals) 设置为 None
网格碰撞体简介
网格碰撞器组件参考