本节详细说明了在 ACTION GAME MAKER 中,对象墙体碰撞(CollisionShape2D) 如何与 瓦片墙 及 其他对象碰撞 交互,以及如何精确配置它们。
墙体碰撞与射线检测行为概述
在 ACTION GAME MAKER 中,墙体碰撞检测通过根据对象的 CollisionShape2D 大小生成一个 矩形碰撞区域 来实现。
从该矩形的四条边向外发射 射线(Ray) ——这些是用于基于法线的碰撞检测的不可见检测线。
射线 可以理解为以固定间隔发射的不可见“子弹”。当其中一条射线接触到另一个墙体碰撞器或瓦片时,系统会将其识别为 碰撞。
这种检测方法称为 射线检测(Raycast)。
射线检测配置
射线检测参数可在以下条件中调整:
- “对象墙体碰撞”
- “瓦片碰撞”
- “斜坡瓦片碰撞”
射线数量(ray_number)
此参数为整数,决定在检测区域每条边上发射多少条射线。
射线在边的长度上 均匀分布。
例如,若一边长 24 像素:
- 使用 3 条射线,则每 12 像素 一条。
- 使用 4 条射线,则每 8 像素 一条。
射线数量越多,检测精度越高,
但也会增加处理负载——请注意性能影响。
检测方法(detect_method)
可选择 Any(任意) 或 All(全部):
- Any:只要 至少一条 射线接触,即视为碰撞。
- All:仅当所有 射线均接触时,才视为碰撞。
例如,仅在角落接触时:
- Any → “检测到碰撞。”
- All → “未检测到碰撞。”
射线长度(ray_length)
这是一个 浮点数,决定每条射线的 延伸距离(以像素为单位)。
换句话说,它定义了对象在 多远距离内 仍能检测到碰撞。
这对 垂直移动 的对象(如 电梯或升降平台)尤为重要。
例如,当电梯下降时,角色位置可能在某一帧暂时与平台分离。
若射线长度过短,系统可能误判为 无接触。
但若射线过长,可能导致系统在对象 实际未接触 时仍检测到碰撞。
建议根据以下参数调整:
GameObject > CharacterBody2D > Floor的 Snap Length 值,或- 所用移动平台的 速度。
射线偏移(ray_offset)
这是一个 浮点数,定义射线从各角点开始的 偏移距离。
如前所述,碰撞检测区域 始终为矩形,
但实际碰撞器可能是 胶囊体、多边形或多个形状组合。
使用 偏移量 可使射线更贴合碰撞器的真实形状。
偏移值以 每条边两端起算的像素数 为单位。
例如,若一边长 24 像素 且发射 3 条射线,布局如下:
坐标空间(coord_space)
此设置决定用于解释碰撞方向的 坐标空间。
当对象 旋转 时尤其有用,因为它会改变接触方向的判定方式。
例如:
- 若一个旋转 180° 的对象接触地面,应视为接触 底部 还是 顶部?
- 若需检测 头部碰撞,可能希望判定为“顶部”。
- 若检查 地面接触,则应判定为“底部”。
有时 仅碰撞器旋转,而对象整体未旋转。
可选择三种坐标模式:
Global(全局)、Local is Game Object(对象局部) 和 Local is Collision(碰撞器局部)。
我们来看两个例子:
① 当整个 GameObject 旋转 45° 并接触地面时:
② 当仅碰撞器旋转 90°,而 GameObject 未旋转时:
-
Global(全局坐标空间)
检测基于 GameObject 与目标碰撞器的 世界坐标。
不考虑旋转,因此案例①和②均被检测为接触 底部。 -
Local is Game Object(对象局部空间)
检测基于 GameObject 的局部旋转。
- 案例①:检测为接触 右侧 和 底部。
- 案例②:检测为接触 底部。
- Local is Collision(碰撞器局部空间)
检测仅基于 碰撞器自身的旋转。
- 案例①:检测为接触 右侧 和 底部。
- 案例②:检测为接触 右侧。
这乍看可能较复杂,
但掌握这些设置后,您即可构建 精确且灵活的碰撞行为,完美匹配您游戏的独特机制。





