碰撞体
每个物理实体需要在 RigidBody 旁附加至少一个碰撞体形状。碰撞体定义用于碰撞检测的物理形状。
碰撞体类型
| 碰撞体 | 形状 | 适用场景 |
|---|---|---|
| BoxCollider | 轴对齐矩形 | 箱子、平台、墙壁 |
| CircleCollider | 圆形 | 球、金币、圆形物体 |
| CapsuleCollider | 胶囊(矩形两端半圆) | 角色、药丸形物体 |
| SegmentCollider | 线段 | 薄墙、单向平台 |
| PolygonCollider | 凸多边形(最多 8 顶点) | 自定义凸形状 |
| ChainCollider | 线段链 | 地形、复杂静态边界 |
通用属性
所有碰撞体(ChainCollider 除外)共享以下属性:
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
density | number | 1.0 | 质量密度。影响刚体总质量 |
friction | number | 0.6 | 表面摩擦力(0 = 冰面,1 = 橡胶) |
restitution | number | 0.0 | 弹性(0 = 无弹性,1 = 完全弹性) |
isSensor | boolean | false | 触发区域——检测重叠但不产生物理响应 |
categoryBits | number | 1 | 碰撞过滤类别位 |
enabled | boolean | true | 启用/禁用碰撞体 |
BoxCollider
轴对齐矩形碰撞体。
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
halfExtents | Vec2 | {x: 0.5, y: 0.5} | 半宽和半高,以物理单位计 |
offset | Vec2 | {x: 0, y: 0} | 相对实体中心的偏移,以物理单位计 |
radius | number | 0.0 | 圆角半径。大于 0 时创建圆角矩形 |
加上所有通用属性。
CircleCollider
圆形碰撞体。
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
radius | number | 0.5 | 圆半径,以物理单位计 |
offset | Vec2 | {x: 0, y: 0} | 相对实体中心的偏移,以物理单位计 |
加上所有通用属性。
CapsuleCollider
胶囊形碰撞体(矩形上下两端为半圆)。
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
radius | number | 0.5 | 胶囊半径,以物理单位计 |
halfHeight | number | 0.5 | 矩形中段的半高,以物理单位计 |
offset | Vec2 | {x: 0, y: 0} | 相对实体中心的偏移,以物理单位计 |
加上所有通用属性。
碰撞过滤
碰撞层让你控制哪些对象可以互相碰撞。系统使用 16 个命名层和位掩码过滤。
工作原理
每个碰撞体有一个 categoryBits 字段将其分配到一个层。Settings → Physics → Collision Matrix 中的碰撞矩阵决定哪些层之间可以交互。
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
categoryBits | number | 1 | 碰撞体所属层(位掩码,每层一个位) |
当两个碰撞体的层在碰撞矩阵中被允许交互时,碰撞才会发生。
编辑器设置
- 在 Settings → Physics → Collision Layers 中命名层(最多 16 层,如 “Player”、“Enemy”、“Ground”、“Projectile”)
- 在 Settings → Physics → Collision Matrix 中配置矩阵——勾选需要碰撞的层对
- 在 Inspector 中分配层——每个碰撞体的
categoryBits下拉菜单显示已命名的层