手册:碰撞设置——CollisionLayer 和 CollisionMask

动作游戏制作器直接使用Godot的碰撞层系统。有效使用时,这允许实现各种各样的碰撞行为和交互。


配置碰撞的位置

墙壁碰撞

攻击碰撞

  • AttackArea2DCollisionObject2D > Collision

受击碰撞

  • HitArea2DCollisionObject2D > Collision

理解 CollisionLayer 和 CollisionMask

  • 碰撞层 (Collision Layer):指示对象属于哪些层
  • 碰撞掩码 (Collision Mask):指示对象希望与哪些层发生碰撞

碰撞与组/攻击属性检查的顺序

  1. 碰撞处理(碰撞层 / 碰撞掩码)
  2. 组 / 攻击属性处理

这意味着组或属性检查仅在检测到碰撞后才会执行。因此,如果两个对象或图块没有发生碰撞,它们的组/属性处理将不会执行。


组织碰撞层名称

您可以通过以下方式为碰撞层分配名称:
项目设置 > 常规 > 层名称 > 2D 物理

设置后,将鼠标悬停在层号上即可显示分配的名称。


单向碰撞

由于碰撞掩码 (CollisionMask) 是单向的,它允许非对称交互:

示例:

  • 对象 A:层 = 1,掩码 = 1
  • 对象 B:层 = 2,掩码 = 1, 2

对象 A 不会检测到对象 B,但对象 B 会检测到对象 A

这导致独特的结果:

  • 对象 A 可以推动对象 B,但
  • 对象 B 无法推动对象 A

为什么?

这是由于一个稍显进阶的概念:

  • 对象 A 不识别 对象 B,但它仍然会移动
  • 对象 B(它确实识别对象 A)试图应用反向推力物理效果。
  • 然而,由于对象 A识别该碰撞,它不会做出响应,并且甚至不会移动 1 像素

可站立的移动平台

您可以利用此行为创建不会因碰撞而移位、但能承载角色的平台

操作方法:

  • 移动平台的碰撞掩码设置为无(空)
  • 这使得平台免疫于被任何物体推动,但仍能承载站在其上的物体。