Mover 是 Epic 提供的实验性组件,用于替代 UCharacterMovementComponent(CMC)。它可移动任意 Actor(不限于胶囊体角色),通过数据驱动的确定性模拟与回滚网络实现,移动逻辑分布在模块化对象中(移动模式、分层移动、转移、修改器),不再使用硬编码的枚举加 switch;所有状态通过复制的快照结构体流转,而不是直接修改组件。
用途与定位
在 UE 5.8 中,Mover 处于实验状态(位于 Engine/Plugins/Experimental/Mover/),API 仍会在小版本之间变动。CMC 仍被完整支持;如果新项目希望采用模块化架构、回滚网络代码或物理驱动移动,可以选择 Mover。该技能适用于:基于 UMoverComponent / UCharacterMoverComponent 构建玩家或 AI Pawn;编写自定义移动模式(滑翔、跑墙、抓钩)或转移;施加冲刺、发射、击退、传送等临时运动;将 CMC 角色迁移到 Mover 或评估是否迁移;排查“Mover Actor 不移动、回弹、忽略 SetActorLocation”等问题。
核心心智模型
每个模拟帧由后端驱动以下循环:ProduceInput(编写输入指令)→ SimulationTick(模式与分层移动提议并执行移动)→ FinalizeFrame(把新状态应用到 Actor 组件)。FMoverInputCmdContext 表示玩家或 AI 本帧的意图,是带类型结构体的数据集合,默认包含 FCharacterDefaultInputs。FMoverSyncState 是权威、可复制、可回滚的状态,包括当前模式名、活动的分层移动与修改器,以及保存位置、朝向、速度、移动基底的数据集合。活动移动模式与各分层移动分别生成 FProposedMove,由移动混合器按 EMoveMixMode 与优先级合并,再由模式的 SimulationTick 对碰撞执行结果。
由此有三条规则:不要直接修改移动状态,不要调用 SetActorLocation 或速度设置器,而应通过 QueueNextMode、QueueLayeredMove、QueueInstantMovementEffect、QueueMovementModifier 排队;所有玩法影响都通过输入指令或排队对象进入模拟,以便回滚时能一致重放;ProduceInput 仅在本地控制实例上运行且重模拟时不重跑,所以只在那里表达意图,不要在其中做模拟。
启用与依赖
需启用 Mover 插件(实验性),可选启用 MoverExamples(示例 Pawn、模式、滑索/翻越内容)与 MoverTests。物理驱动移动位于独立的 ChaosMover 插件中。C++ 模块依赖需在 Build.cs 中添加 "Mover";若直接接触 NP 后端或 liaison 类型,还需添加 "NetworkPrediction"。
最小 Mover 角色
UCharacterMoverComponent 在 UMoverComponent 基础上提供角色默认能力:预注册 Walking/Falling/Flying 模式,起始模式为 Falling,并处理跳跃与下蹲。普通 UMoverComponent 初始没有任何模式。实现时让 Pawn 实现 IMoverInputProducerInterface 并覆写 ProduceInput_Implementation,在其中填充 FCharacterDefaultInputs(控制旋转、方向意图、朝向意图、跳跃按下与刚按下),MoverComponent 会在 BeginPlay 自动将其注册为 InputProducer。ProduceInput 是 BlueprintNativeEvent,可在 C++ 或蓝图事件中覆写;增强输入动作照常绑定,处理函数只缓存数值供 ProduceInput 读取。EMoveInputType::Velocity 用于请求精确速度(AI/导航移动),AI 寻路可添加 UNavMoverComponent。
移动模式
模式是以 FName 为键的 UBaseMovementMode 实例。默认名称包括 Walking(地面移动、地面检测、基于移动)、Falling(空中加重力,UCharacterMoverComponent 的默认起始模式)、Flying(自由 3D 移动)、Swimming(需要 Water 插件体积,默认不注册)。另有 NavWalking、Async 系列与 ChaosMover 插件中的 Chaos 系列模式。切换模式可用 QueueNextMode、输入中的 SuggestedMovementMode,或运行时 AddMovementModeFromClass / RemoveMovementMode;通过 OnMovementModeChanged 委托响应变化。模式自带的 Transitions 与组件级 Transitions 每帧评估,可声明式切换模式。自定义模式需实现 GenerateMove_Implementation(提议速度与朝向)与 SimulationTick_Implementation(对世界执行混合后的提议移动),模式需以 MoverComponent 为 Outer 创建。
分层移动与瞬时效果
分层移动(FLayeredMoveBase)在当前模式之上按持续时间运行,各自生成提议移动并按 MixMode(叠加、覆盖速度、覆盖全部)与优先级混合,会复制并参与回滚。内置类型包括线性速度、持续跳跃冲量、跳跃到、移动到、移动到动态目标、径向冲量与动画根运动等;可用 CancelFeaturesWithTag 按玩法标签取消。5.7 起新增实例化形式:无状态的 ULayeredMoveLogic 类与复制的实例化数据。瞬时移动效果(FInstantMovementEffect 子类)只在一个帧内改变移动状态,作为“直接设置位置/速度”的回滚安全替代,内置传送、跳跃冲量、施加速度等效果;联网物理模拟可用 ScheduleInstantMovementEffect 让各端在同一帧应用。
跳跃、下蹲与状态查询
UCharacterMoverComponent 提供 Jump、CanActorJump、Crouch、UnCrouch 以及 IsOnGround、IsFalling、IsAirborne、IsCrouching、IsSwimming、IsSlopeSliding 等查询;下蹲是移动修改器 FStanceModifier(调整胶囊体与标签)。任意 UMoverComponent 可查询速度、移动意图、模式名、完整同步状态快照、状态标签(Mover_IsOnGround 等)、脚下地面检测结果,以及用于动画/运动匹配的预测轨迹。
参数调优
旧式模式读取共享设置 UCommonLegacyMovementSettings,包括最大速度、加速度、减速度、转向速率、最大台阶高度、可行走坡度余弦、跳跃上升速度、地面/空中/游泳模式名映射、摩擦与制动等。可在 Mover 组件的 Shared Settings 数组编辑,或运行时通过 FindSharedSettings_Mutable 修改(例如切换行走速度)。
网络后端
MoverComponent 自身不 tick,而由后端 liaison 驱动:默认的 Network Prediction(客户端预测与回滚,适合运动学角色)、Chaos 联网物理(物理驱动移动,需 ChaosMover 插件)与 Standalone(单机、无网络、开销最低)。回滚会从修正状态向前重模拟,并触发 OnPostSimulationRollback 供玩法与特效响应。自定义复制移动状态需继承 FMoverDataStructBase 并加入输入/同步集合。
CMC 到 Mover 迁移对照
MaxWalkSpeed 对应共享设置中的 MaxSpeed;JumpZVelocity 对应 JumpUpwardsSpeed;SetMovementMode(MOVE_Flying) 对应 QueueNextMode("Flying") 或输入 SuggestedMovementMode;PhysCustom 与 CustomMovementMode 对应以自有名称注册的自定义 UBaseMovementMode;LaunchCharacter 对应 FApplyVelocityEffect 或 FLayeredMove_LinearVelocity;SetActorLocation/传送对应 FTeleportEffect;根运动蒙太奇对应 FLayeredMove_AnimRootMotion;FSavedMove_Character 的自定义标志对应加入输入指令集合的自定义 FMoverDataStructBase。
限制
资料说明 Mover 在 5.8 中仍为实验性,API 会随小版本变动;游泳模式依赖 Water 插件体积;物理驱动移动需单独的 ChaosMover 插件。其余具体平台支持、性能数据、许可与价格信息暂未提供。