## 2.2 状态同步

1.客户端-服务器游戏架构

2.客户端预测和服务器调和

3.实体插值

4.滞后补偿


1.客户端-服务器游戏架构

csharp 复制代码

2.客户端预测和服务器调和

csharp 复制代码
1).问题

csharp 复制代码
2).客户端预测

csharp 复制代码
3).服务器调和
csharp 复制代码
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.实体插值

csharp 复制代码

4.滞后补偿

csharp 复制代码
相关推荐
郝学胜-神的一滴10 小时前
罗德里格斯旋转公式(Rodrigues‘ Rotation Formula)完整推导
c++·unity·godot·图形渲染·three.js·unreal
田鸡_17 小时前
Unity新输入系统(Input System)教学篇
unity·游戏引擎·游戏程序
EQ-雪梨蛋花汤17 小时前
【Unity笔记】Unity 音游模板与免费资源:高效构建节奏游戏开发全指南
笔记·unity·游戏引擎
星辰徐哥17 小时前
Unity基础:游戏对象的激活与隐藏:SetActive方法详解
游戏·unity·lucene
微莱羽墨17 小时前
零、0基础入门Unity 安装详细教程(2026最新版教程,安装Unity看这一篇就够了!)
unity·游戏引擎·unity安装
星辰徐哥17 小时前
Unity C#入门:变量的定义与访问权限(public/private)
unity·c#·lucene
nnsix18 小时前
Unity 刚体的 默认力、瞬时力 区别
unity·游戏引擎
nnsix18 小时前
Unity Sprite的 Generate Physics Shape 参数解释
unity·游戏引擎
魔士于安19 小时前
Unity完整小球迷宫项目
前端·unity·游戏引擎·贴图·模型
め.19 小时前
Unity协程的原理
unity·游戏引擎