预测(Prediction) 是解决网络延迟问题、提升玩家操作流畅度的核心机制
客户端接收玩家输入
玩家操作(如 WASD 移动、跳跃)被捕获为输入事件(FInputActionValue)。
客户端本地预测执行
客户端不等服务器响应,直接基于输入在本地模拟角色行为(如移动、动画播放),并立即更新画面。此时客户端显示的是 "预测状态"。
客户端向服务器发送输入
输入数据被打包并通过网络发送给服务器(通常每帧或固定间隔发送)。
服务器权威处理
服务器接收输入后,重新计算角色状态(位置、旋转等),由于服务器是权威(Authority),其计算结果是 "真实状态"。
服务器同步结果到客户端
服务器将权威结果广播给所有客户端(包括输入发起的客户端)。
客户端校验与修正
发起输入的客户端对比 "本地预测结果" 和 "服务器权威结果":
如果差异较小(在容差范围内),则认为预测成功,无需修正。
如果差异较大(如因网络延迟导致预测偏差),客户端会快速 "回滚" 到服务器状态,并重新预测中间帧,避免画面跳变。
UE5 中实现预测的关键组件
Character Movement 组件
UE5 的UCharacterMovementComponent内置了成熟的预测逻辑,尤其对角色移动的预测做了深度优化。只需启用相关设置(默认已启用),即可自动处理大部分移动预测。
关键设置:
bNetworkSmoothing:启用网络平滑,减少修正时的跳变感。
NetworkSmoothingFactor:平滑因子,控制修正速度。
Actor 的网络角色(Role)
UE5 中每个 Actor 有网络角色(GetLocalRole()),决定其在当前设备上的权限:
ROLE_Authority:服务器端,拥有权威控制权。
ROLE_AutonomousProxy:本地玩家控制的角色,会执行预测。
ROLE_SimulatedProxy:其他玩家的角色,仅接收服务器同步结果,不预测。
预测逻辑通常只在ROLE_AutonomousProxy角色上执行。