## 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 复制代码
相关推荐
__water1 天前
RHK《Unity接入PicoSDK入门》
unity·游戏引擎·picosdk
我的golang之路果然有问题1 天前
unity 资源导入 godot
unity·游戏引擎·godot
迪普阳光开朗很健康1 天前
Unity+Vscode+EmmyLua+XLua 调试实战
vscode·unity·游戏引擎
Var_al1 天前
Unity编辑器扩展:标准化UI组件快速创建工具开发指南
ui·unity·c#·编辑器
CreasyChan1 天前
Unity 中的 IEnumerator协程详解
unity·c#·游戏引擎
熬夜敲代码的小N1 天前
基于Unity开发Pico VR眼镜基础应用:从环境搭建到实战部署全解析
人工智能·unity·游戏引擎·vr
王维志2 天前
使用C#控制台批量删除 Unity目录里的 .meta文件
unity·c#·.net
avi91112 天前
Unity 天命6源码- 商业游戏说明分析
开发语言·unity·c#·游戏开发·游戏源码
世洋Blog2 天前
Unity脚本生命周期(全)
unity·游戏引擎
DowneyJoy2 天前
【多媒体交互】透明无边框窗口
unity·c#·.net·交互