Table of Contents

可碰撞体

初级 设计师

可碰撞体(Collidables)是物理对象的基础实体组件。主要有三种类型:

  • 静态体:不移动的对象(地形、墙壁、地面、大石块)
  • 刚体:受重力和碰撞影响的移动对象(罐子、球、箱子)或运动学刚体(移动平台、门)
  • 角色:用于基本角色(玩家角色、动物、NPC)的碰撞体

静态与刚体碰撞体

你还可以:

碰撞

可碰撞体按照下表进行交互。

角色 刚体 静态体
角色 碰撞 碰撞并反弹 碰撞
刚体 碰撞并反弹 碰撞并反弹 碰撞并反弹
静态体 碰撞 碰撞并反弹 相互穿过

角色没有任何惯性,因此在与刚体或静态体碰撞时无法被弹开。

还有另外三个因素决定两个可碰撞体之间是否会发生碰撞:它们的 Collision Layer(碰撞层)、Collision Group(碰撞组)和 Contact Event Handler(接触事件处理器)

碰撞层

碰撞层控制该对象是否与其他层上的对象发生碰撞。

这种关系通过模拟的碰撞矩阵来控制。

碰撞组

这个属性用于在一组对象内部过滤碰撞,当两个或多个对象必须共享同一个 Collision Layer,但它们之间不应发生碰撞时使用。

它允许共享相同 CollisionGroup.Id 的对象在它们的 IndexA、IndexB 和 IndexC 之间的绝对差值小于二时相互穿过。

其实用性最好通过具体示例来展示。

  • 你有多个角色 A, B, C, D,全部设置为相同的 CollisionLayer,它们被分成两队 A, B 和 C, D。同一队的成员之间不应发生碰撞,你可以将 A, B 的 Id 设为 1,将 C, D 的 Id 设为 2。

  • 你有一条由三个相互连接的碰撞体组成的链 A, B, C,你不希望 A 和 C 与 B 发生碰撞,但 A 和 C 之间应该碰撞。 将 A、B 和 C 的 Id 都设为 1 以开始过滤,保持 A 的 IndexA 为 0,B 的为 1,C 的为 2。 A 和 C 会发生碰撞,因为它们的 IndexA 之差等于二, 但它们都不会与 B 碰撞,因为它们与 B 的 IndexA 值都只相差一。

接触事件处理器

接触事件处理器(Contact Event Handler)是一个类,每当与之关联的对象与世界发生碰撞时,它会接收碰撞数据。

它最常用于将物理对象转换为"触发盒",即当玩家角色等对象穿过它们时运行事件的区域。参见触发器。

如果你绑定到对象的接触事件处理器设置为 NoContactResponse,该对象将永远不会阻止任何东西穿过它,它只会收集碰撞事件。

另请参阅