2.3 角色移动组件:移动模式与回调是手感的底座

核心结论

CharacterMovementComponent(CMC)不只是"让角色走走跑跑"——它内置了行走/下落/飞行/游泳/自定义五种移动模式、八方向加速、网络预测与平滑。绝大多数"手感不好"的动作游戏,都是没用好 CMC 的回调,而不是动画不够多。官方对 CMC 的设置有专门一页(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/setting-up-character-movement-27c2),我的增量是"怎么把模式切换串成手感"。

五种移动模式与我的用法

模式 用途 我的使用场景
Walk 地面行走 默认
Falling 空中(跳跃/击飞后) 跳跃与受击浮空
Flying 自由飞行 观战相机/幽灵
Swim 水中 水域关卡
Custom 自定义(脚本控制) 冲刺/蹬墙跳/拽绳

核心心法:冲刺、攻击位移这类"自定义位移"不要写在 Tick 里加减速度,而是切到 Custom 模式,用 CMC 的 PhysCustom 逻辑——这样网络复制、碰撞、地面检测全部免费。

手感相关的关键属性

属性 影响 我的常用值
MaxWalkSpeed 最大移动速度 走 250 / 跑 600
Acceleration 加速度(达到最大速度的时间) 2000+ 手感跟手
BrakingFriction 刹车力度 高一点更"脆"
RotationRate 转身速度(Orient Rotation) 动作游戏调高
JumpZVelocity 跳跃力 500~700
AirControl 空中操控 0.3~0.5
bUseSeparateBrakingFriction 独立刹车摩擦 冲刺急停用

一句话:跟手 = 高 Acceleration + 高 Braking。慢吞吞的角色往往是 Acceleration 默认值(2048 太低且平滑时间太长)。

六个必接的回调

回调 用途
OnMovementModeChanged 切模式(冲刺/落地)
OnLanded 落地反馈:震屏+音效+灰尘粒子
OnJumped 起跳反馈
OnSprintStateChanged(自定义) 冲刺镜头 FOV 变化
OnHit/OnActorHit 撞墙/卡住检测
OnStartCrouch 蹲伏

这六个回调就是"反馈层"的指令源——音效/特效/镜头(第 3 章)全部从这里订阅。不要在动画蓝图里判断"是否在地面",从 CMC 拿。

常见坑与解法

坑 1:攻击时角色漂移

原因:攻击 Montage 开了 Root Motion 但没禁用移动输入,或 CMC 还在 Walk 模式有惯性。

解法:攻击时切 Custom 模式或把 MaxWalkSpeed 临时归零,用 Montage 的 Root Motion 精确控制位移(Root Motion 会被复制)。

坑 2:联机时其他玩家滑步

原因:模拟代理(其他玩家)的移动平滑参数没调。

解法:bNetworkSmoothing 与 MaxSmoothNetUpdate 的调参(网络复制那本书有专章)。

坑 3:冲刺时穿模/卡墙

原因:Custom 模式里手写位移,没走 CMC 的 SafeMovement。

解法:位移用 CMC 的 MoveSmooth 或 PerformMovement 接口;别直接 AddActorWorldOffset。

相关节点速查

  • 官方设置页:https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/setting-up-character-movement-27c2
  • 移动模式:CMC 的 SetMovementMode
  • Root Motion:https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/animation-montage-in-unreal-en-a6c5(Montage 与根运动)

心得:我把"手感"当系统而非感觉做:五个移动模式 + 六个回调 + 一张参数表。调手感时只改表不动代码,两小时能把角色从"飘"调到"脆"。CMC 是 UE 藏得最深的好东西——用好了你的手感继承自十年竞技游戏的积累。