Featured image of post UE Mantle System 墙体判定巧思

UE Mantle System 墙体判定巧思

Classify walls into a 2x2 height×thickness matrix with two vertical traces for UE5 Mantle vault/climb.

UE Mantle System 的墙体判定巧思

版本:UE 5.8

UE Mantle System 蓝图

核心思路

一个"墙"其实是一个剖面:既要判高度,又要判厚度,还得知道墙后面是什么。本系统的巧思是:不直接测量墙,而是用两次向下的竖直采样取到墙的剖面两点,再用两个布尔量把整面墙归类成 4 种可翻越场景。

巧思一:把 3D 墙面问题降维成"两点剖面测量"

  • Trace1 从角色前方命中墙面,拿到 WallLocation + WallNormal,作为参考系。
  • 沿墙面法线反方向(往墙里钻)退 10cm、50cm 两个位置,各向下打一条竖直射线:
    • 近侧(退 10)→ 近端顶面 WallTopHegihtNear
    • 远侧(退 50)→ 墙远端后面的物体 WallTopHeightFar

巧思二:不测宽度,用"近远顶高差"推断厚度

1
IsWallThick = (WallTopHegihtNear - WallTopHeightFar).Z < 30
  • 远端采样落在宽平台顶面 → 高差 ≈ 0 → 厚墙(可站立)
  • 远端采样落到墙后地面(薄墙)→ 高差大 → 薄墙(翻过去/跳下去)

“退 50cm"的采样距离本身就是厚度阈值 —— 阈值被物理编码进射线偏移里,30cm 只是吸收远端边缘坡度的容差。

巧思三:高度 × 厚度 组成 2×2 决策矩阵

薄墙(远端无顶) 厚墙(顶面平坦)
矮(≤80) Vault 翻越 GettingUp 迈上去
高(>80) Climb → JumpingDownFromWall Climb 爬上去站立

高度由 (WallTopHegihtNear - WallLocation).Z > 80 判定。2 次采样 + 2 个布尔量归整面墙,决策极简。

巧思四:全程用"差值"而非绝对坐标

所有判定基于高度差,墙在任意海拔/层高下都成立。

巧思五:采样点"嵌进墙里”,避开墙檐毛边

近侧采样在 WallLocation + 法线反方向*10(墙体内侧而非外沿),向下打线不会在边缘处漏检。

巧思六:失败即跳跃,闸门防重入

  • 检测未命中 → 不做失败处理,直接 Jump 贴近墙,失败路径本身就是行为。
  • 事件开头 CanMantleTrigger 先置 false、末尾才复位。

巧思七:攀爬前"头顶预检"

ActorLocation + (0,0,200) 向前打线,头顶有遮挡就放弃攀爬、只跳一下;确认净空才进动画。

动画期间的"接管"套路

SetIgnoreMoveInput(true) → Capsule NoCollisionSetMovementMode(Flying) → 动画播完后统一恢复(碰撞 QueryAndPhysicsWalking → 解禁输入 → 复位闸门)。

本作品采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可(CC BY-NC-SA 4.0)
文章浏览量:Loading
Powered By MC ZBD Studio
发表了64篇文章 · 总计115.79k字
载入天数...载入时分秒...
总浏览量Loading | 访客总数Loading

主题 StackJimmy 设计
由ZephyrBD修改