2D 碰撞组件

添加碰撞组件

目前引擎支持三种不同的碰撞组件: 盒碰撞组件(BoxCollider2D)圆形碰撞组件(CircleCollider2D)多边形碰撞组件(PolygonCollider2D)。在 属性检查器 上点击 添加组件 按钮,输入碰撞组件的名称即可添加。

碰撞组件

属性

不同的碰撞组件都拥有以下的共同属性:

inspector

属性说明
Editing是否对碰撞组件进行编辑。勾选后可以在场景内编辑碰撞组件的位置、样式和大小。详情请参考下方 编辑碰撞组件
Tag标签。当发生碰撞后,可根据 Tag 区分不同碰撞组件
Group碰撞组件分组。通过 碰撞矩阵 可设置不同分组间碰撞的可能性
Sensor指明碰撞组件是否为传感器类型,传感器类型的碰撞组件会产生碰撞回调,但是不会发生物理碰撞效果
Density碰撞组件的密度,用于刚体的质量计算
Friction碰撞组件摩擦力系数,碰撞组件接触时的运动会受到摩擦力影响
Restitution碰撞组件的弹性系数,指明碰撞组件碰撞时是否会受到弹力影响
Offset碰撞组件相对于节点中心的偏移

盒物理碰撞组件

盒碰撞组件是常见的碰撞组件,用于模拟类矩形的碰撞组件。在 2D 节点的 属性检查器 上点击 添加组件 -> BoxCollider2D 即可添加。

box-collider-2d

属性

属性说明
Size盒碰撞组件的大小

盒碰撞组件接口请参考 BoxCollider2D API

编辑碰撞组件

对于所有碰撞组件,勾选 Editing 后都可在场景内进行编辑。

editing

在碰撞组件范围内按下鼠标左键并拖拽可以调整碰撞组件的偏移,在 gizmo 上按下鼠标左键并拖拽可以调整碰撞组件的形状和大小。

edit-box-collider

按住 Alt 按键拖拽时,在拖拽过程中将会保持 矩形中心位置 不变。

alt

属性检查器 上输入也可以精细化的调整碰撞组件的大小和偏移。

input

圆形碰撞组件

属性检查器 上点击 添加组件,输入 CircleCollider2D 可添加圆形碰撞组件。

circle-collider

属性

属性说明
Radius圆形的半径

圆形碰撞组件接口请参考 CircleCollider2D API

编辑碰撞组件

按住 Alt 按键拖拽时,在拖拽过程中将会保持 圆心位置 不变。

edit-circle-collider

多边形碰撞组件

通过多边形碰撞组件,可以编辑更为详细的物理形状,从而更准确的对物体进行物理模拟。

属性检查器 上点击 添加组件,输入 PolygonCollider2D 可添加多边形碰撞组件。

polygon

属性

属性说明
Threshold指明生成贴图轮廓顶点间的最小距离,值越大则生成的点越少,可根据需求进行调节
Points多边形的顶点,顶点可以通过勾选 Editing 在场景内进行编辑,也可以在 属性检查器 上输入数值来调整

多边形碰撞组件接口请参考 PolygonCollider2D API

编辑碰撞组件

如果是 Sprite 组件,引擎会根据 Sprite 生成轮廓:

default

通过鼠标拖拽 gizmo 可以调整轮廓点的位置。

edit

通过调整 Threshold 并点击 points 按钮,可以调整轮廓的形状和点的数量。

threshold-1

鼠标移到多边形的线段上时,该线段会高亮并且鼠标会变为添加样式,此时点击鼠标左键可在线段中插入新的点。

add-point

详细说明

Box2D 物理碰撞组件内部是由 Box2D 的 b2Fixture 组成的,由于 Box2D 内部的一些限制,一个多边形物理碰撞组件可能会由多个 b2Fixture 组成。

这些情况为:

  1. 当多边形物理碰撞组件的顶点组成的形状为凹边形时,物理系统会自动将这些顶点分割为多个凸边形。但需要注意的是该算法无法处理凹多边形自相交的问题。
  2. 当多边形物理碰撞组件的顶点数多于 b2.maxPolygonVertices(一般为 8)时,物理系统会自动将这些顶点分割为多个凸边形。

一般情况下这些细节是不需要关心的,但是当使用射线检测并且检测类型为 ERaycast2DType.All 时,一个碰撞组件就可能会检测到多个碰撞点,原因即是检测到了多个 b2Fixture。