1.客户端-服务器游戏架构
2.客户端预测和服务器调和
3.实体插值
4.滞后补偿
1.客户端-服务器游戏架构
2.客户端预测和服务器调和
1).问题
2).客户端预测
3).服务器调和
1).统一数据格式与快照存储a.本地处理- 发送消息时, 必须携带的信息: 本地位置(x/y/z) + 发送时间戳(t_local_send)+ 唯一请求ID- 同时本地缓存该"状态快照", (含移动速度、方向、当前场景状态)b.服务器返回消息请求ID + 权威位置(x_s/y_s/z_s) + 服务器时间戳(t_server) + 服务器当前帧号, 确保与本地请求一一匹配2).核心判断: 是否需要回滚a.匹配请求ID, 找到对应的本地快照, 对比服务器时间戳(t_server)与本地快照的发送时间戳(t_local_send)b.若t_server > t_local_send(服务器数据更新), 计算本地当前位置与服务器权威位置的偏差(距离d)c.设定偏差阈值(如 d > 角色移动速度 ×0.3 秒, 避免微小偏差频繁回滚), 若d超过阈值且本地已越过权威位置, 触发回滚3).回滚执行: 平滑且不丢状态 ?? 后续修改冻结本地移动输入:回滚期间暂时屏蔽本地方向 / 速度修改,避免状态冲突。
回溯关联状态:同步重置与位置绑定的本地状态(如已触发的场景事件、任务进度、碰撞检测结果)。
平滑过渡位置:用插值算法(线性插值 / 缓动插值),在 150-250 毫秒内让本地位置从当前点过渡到服务器权威位置,避免画面跳变。
恢复输入同步:过渡完成后,以服务器权威位置为基准,恢复本地移动输入,后续本地移动基于该基准计算4).异常处理: 避免不合理回滚若服务器消息延迟过高(t_server - t_local_send > 1秒), 且本地已大幅偏离权威位置(d > 角色移动速度 ×2 秒), 直接同步服务器最新位置, 不执行历史位置回滚
3.实体插值
4.滞后补偿