useBodyPosition | 是否应按附加的 Rigidbody2D 的位置变换网格? |
useBodyRotation | 是否应按附加的 Rigidbody2D 的旋转变换网格? |
创建与 Collider2D 几何体定义的区域相同的平面 Mesh。
简单来说,此方法会创建 Mesh,准确表示 Collider2D 定义的区域。创建的 Mesh 随后可以用于任何用途,包括但不限于用于 2D 导航的导航网格。Collider2D 不拥有创建的 Mesh,由你负责其生命周期,因此不删除 Mesh 会导致内存泄露。Collider2D 在此调用过程中不会以任何方式改变。Collider2D 必须具有有效的形状,才能创建 Mesh,否则会返回 NULL,指示未创建任何 Mesh。
所有 Collider2D 几何体都处于所附加到的 Rigidbody2D 的空间中。可以分别使用 useBodyPosition
和 useBodyRotation
来选择是否按 Rigidbody2D 位置和旋转变换 Mesh 矢量。如果 Collider2D 未附加到 Rigidbody2D,则几何体永久处于世界空间中,并且 useBodyPosition
和 useBodyRotation
都应始终设置为 false。
接下来是有关创建 Mesh 时应如何考虑 Collider2D 形状的更多详细信息。尽管有许多类型的 Collider2D,不过它们只生成由以下原始形状类型组成的碰撞几何体:圆形、胶囊体、多边形和边缘。这些原始类型拆分为两个组,称为闭合凸面图元和开放图元。圆形、胶囊体和多边形类型的图元称为闭合凸面图元,可定义由图元确定界限的闭合凸面区域。边缘图元是开放类型,可定义没有内部区域的几何体。
CircleCollider2D 会生成单个圆形图元。CapsuleCollider2D 会生成单个胶囊体图元。BoxCollider2D 会生成单个多边形图元。PolygonCollider2D 可以生成多个多边形图元,以将可能的凹面区域转换为多个凸面多边形。EdgeCollider2D 可以生成多个边缘图元。TilemapCollider2D 可以生成多个多边形图元(按图块)。CompositeCollider2D 可以生成多个多边形图元(在多边形模式下),或是生成多个边缘图元(在轮廓模式下)。
创建 Mesh 以表示 Collider2D 几何体时,所有闭合凸面图元(圆形、胶囊体和多边形)都会生成由这些图元定义的相应填充区域。如果有多个多边形,则会创建所有多边形组成的总体区域。请注意,使用大于零的 BoxCollider2D.edgeRadius(用于生成径向边缘)时,也会创建 Mesh 以表示该几何体。
创建 Mesh 以表示 Collider2D 几何体时,所有开放图元(边缘)都具有特殊处理。第一个边缘的起始顶点与最后一个边缘的结束顶点一致(用于定义伪闭合区域)时,会创建网格以表示该闭合区域,即使 2D 物理本身并不这样处理。如果顶点不一致,则仅当 EdgeCollider2D.edgeRadius 大于零时才会创建 Mesh,因为这会生成具有区域的边缘。
与一致的起始/结束顶点结合使用的 EdgeCollider2D 会创建一个 Mesh,它是所有边缘顶点的凸面外壳。任何凹面顶点(生成凹面配置)都会被视为处于凸面外壳上,从而生成凸面平面 Mesh。如果需要凸面 Mesh,则应使用多个多边形图元,即 PolygonCollider2D 或多边形模式下的 CompositeCollider2D。轮廓模式下的 CompositeCollider2D 会生成具有一致起始/结束顶点的边缘,因此会始终创建闭合形状 Mesh(也支持 CompositeCollider2D.edgeRadius)。
另请参阅:GetShapeHash 和 NavMeshBuildSource.sourceObject。