useBodyPosition | 网格是否应该通过所附 Rigidbody2D 的位置进行变形? |
useBodyRotation | 网格是否应该通过所附 Rigidbody2D 的旋转进行变形? |
useDelaunay | 如果为真,系统将使用 Delaunay 三角剖分生成网格。这可以减少碰撞器网格中创建的顶点数并减少生成的小三角形扇形数量,而这两项操作都可以改善整体网格大小和性能。 |
创建与 Collider2D 几何形状定义的区域相同的平面 网格。
简单来说,此方法会创建一个完全显示 Collider2D 定义的区域的 网格。然后,可以使用创建的 网格 进行任何操作,其中包括但不限于二维导航的导航网格。Collider2D 并不拥有创建的 网格,并且您负责 网格 的生存周期,因此如果不删除 网格,则会导致内存泄漏。Collider2D 在此调用期间不会以任何方式发生改变。Collider2D 必须具有有效的形状才能创建网格,否则系统将返回 NULL 以指示没有创建 网格。
所有 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。
其他资源:Collider2D.GetShapeHash。