## 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 复制代码
相关推荐
mxwin19 小时前
Unity Shader 跨平台兼容性:处理纹理坐标翻转与精度差异
unity·游戏引擎
派葛穆1 天前
汇川PLC-Unity3d与汇川easy521plc进行Modbustcp通讯
unity·c#
small-pudding1 天前
Unity URP + Compute Shader 路径追踪器实战:从可用到可优化
unity·游戏引擎
weixin_423995001 天前
unity 物体转向鼠标点击方向2d和3d
unity·计算机外设·游戏引擎
mxwin1 天前
Unity URP 下 Shader 变体 (Variants):multi_compile 与 shader_feature的关键字管理及变体爆炸防控策略
unity·游戏引擎
RReality1 天前
【Unity Shader URP】全息扫描线(Hologram Scanline)源码+脚本控制
ui·unity·游戏引擎·图形渲染
渔民小镇1 天前
一次编写到处对接 —— 为 Godot/Unity/React 生成统一交互接口
java·分布式·游戏·unity·godot
RReality2 天前
【Unity Shader URP】序列帧动画(Sprite Sheet)实战教程
unity·游戏引擎
mxwin2 天前
Unity URP 多线程渲染:理解 Shader 变体对加载时间的影响
unity·游戏引擎·shader
呆呆敲代码的小Y2 天前
【Unity工具篇】| 游戏完整资源热更新流程,YooAsset官方示例项目
人工智能·游戏·unity·游戏引擎·热更新·yooasset·免费游戏