跳转到内容

链条碰撞器

ChainCollider 定义一条连接线段的链。专为静态地形表面和复杂边界设计,使用单个盒形或线段碰撞体难以实现的场景。

属性

属性类型默认值说明
pointsVec2[]菱形链条顶点,以物理单位计(局部空间)。默认:[{x:-1,y:0}, {x:0,y:0.5}, {x:1,y:0}, {x:0,y:-0.5}]
isLoopbooleantrue将最后一个点连接回第一个点,形成闭合环
frictionnumber0.6表面摩擦力
restitutionnumber0.0弹性
enabledbooleantrue启用/禁用碰撞体
categoryBitsnumber1碰撞过滤类别位
maskBitsnumber0xFFFF碰撞过滤掩码位

场景视图中的点编辑

在编辑器中选中带有 ChainCollider 的实体时,场景视图中会显示点控制点:

  • 拖拽控制点移动点
  • 双击线段插入新点
  • 右键点击控制点删除点

isLoop

isLoopfalse 时,链条是开放路径——物体可以绕过端点。当 isLooptrue 时,最后一个点连接回第一个点,形成闭合边界。

开放链条——适用于地形表面:

commands.spawn()
.insert(Transform)
.insert(RigidBody, { bodyType: 0 })
.insert(ChainCollider, {
points: [
{ x: -10, y: 0 },
{ x: -5, y: 2 },
{ x: 0, y: 0 },
{ x: 5, y: 1 },
{ x: 10, y: 0 },
],
isLoop: false,
});

闭合环——适用于封闭区域:

commands.spawn()
.insert(Transform)
.insert(RigidBody, { bodyType: 0 })
.insert(ChainCollider, {
points: [
{ x: -5, y: -5 },
{ x: 5, y: -5 },
{ x: 5, y: 5 },
{ x: -5, y: 5 },
],
isLoop: true,
});

提示

  • 链条碰撞体没有体积,因此只在一侧产生碰撞。按逆时针顺序排列点以获得朝外的法线。
  • PolygonCollider 不同,链条碰撞体没有顶点数量限制——可以使用任意数量的点定义地形。
  • 对于动态碰撞形状,请使用 PolygonCollider 或基础碰撞体类型。

参见