Version: 2021.2
public Mesh CreateMesh (bool useBodyPosition, bool useBodyRotation);

参数

useBodyPosition 是否应按附加的 Rigidbody2D 的位置变换网格?
useBodyRotation 是否应按附加的 Rigidbody2D 的旋转变换网格?

返回

Mesh 创建与碰撞体几何体匹配的平面 Mesh,如果无法创建 Mesh,则为 NULL。

描述

创建与 Collider2D 几何体定义的区域相同的平面 Mesh

简单来说,此方法会创建 Mesh,准确表示 Collider2D 定义的区域。创建的 Mesh 随后可以用于任何用途,包括但不限于用于 2D 导航的导航网格。Collider2D 不拥有创建的 Mesh,由你负责其生命周期,因此不删除 Mesh 会导致内存泄露。Collider2D 在此调用过程中不会以任何方式改变。Collider2D 必须具有有效的形状,才能创建 Mesh,否则会返回 NULL,指示未创建任何 Mesh

所有 Collider2D 几何体都处于所附加到的 Rigidbody2D 的空间中。可以分别使用 useBodyPositionuseBodyRotation 来选择是否按 Rigidbody2D 位置和旋转变换 Mesh 矢量。如果 Collider2D 未附加到 Rigidbody2D,则几何体永久处于世界空间中,并且 useBodyPositionuseBodyRotation 都应始终设置为 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)。

另请参阅:GetShapeHashNavMeshBuildSource.sourceObject