## 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 复制代码
相关推荐
在路上看风景15 小时前
4.5 顶点和片元
unity
在路上看风景1 天前
31. Unity 异步加载的底层细节
unity
天人合一peng1 天前
Unity中做表头时像work中整个调整宽窄
unity
小李也疯狂2 天前
Unity 中的立方体贴图(Cubemaps)
unity·游戏引擎·贴图·cubemap
牛掰是怎么形成的2 天前
Unity材质贴图引用陷阱:包体暴涨真相
unity·材质·贴图
呆呆敲代码的小Y2 天前
【Unity工具篇】| 超实用工具LuBan,快速上手使用
游戏·unity·游戏引擎·unity插件·luban·免费游戏·游戏配置表
EQ-雪梨蛋花汤2 天前
【Unity优化】Unity多场景加载优化与资源释放完整指南:解决Additive加载卡顿、预热、卸载与内存释放问题
unity·游戏引擎
我的offer在哪里2 天前
用 Unity 从 0 做一个「可以玩的」游戏,需要哪些步骤和流程
游戏·unity·游戏引擎
泡泡茶壶ᐇ2 天前
Unity游戏开发入门指南:从零开始理解游戏引擎核心概念
unity·游戏引擎
YigAin2 天前
Unity中的Lock,到底在锁什么,什么时候该用?
unity