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 藏得最深的好东西——用好了你的手感继承自十年竞技游戏的积累。
