## 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 复制代码
相关推荐
沉默金鱼8 小时前
Unity实用技能-UI进度条
ui·unity·游戏引擎
老朱佩琪!14 小时前
Unity离线开发经验分享
unity·游戏引擎
Sator116 小时前
unity的GPUInstance和GPU动画
unity·游戏引擎
沉默金鱼1 天前
Unity实用技能-模型
unity·游戏引擎
阿里云云原生1 天前
AgentRun:如何利用 AI Agent 构建现代化的舆情分析解决方案?
人工智能·unity·游戏引擎
在路上看风景1 天前
2.8 预渲染
unity
老朱佩琪!1 天前
Unity代理模式
unity·游戏引擎·代理模式
老朱佩琪!2 天前
Unity命令模式
unity·游戏引擎·命令模式
世洋Blog2 天前
Unity编辑器基础
unity·c#·编辑器·游戏引擎
老朱佩琪!2 天前
Unity责任链模式
unity·设计模式·责任链模式