网络架构进阶 上
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
位移同步,直接同步位置的话会有大量延时
使用插值优化
Interpolation
Extrapolation
使用内插值在网络同步间的渲染帧,平滑插值出角色位移
需要加剧延时,在当前状态和之前状态使其平滑
使用外插值预测敌方角色位置
Dead Reckoning
Projective Velocity Blending (PVB)
如果外插值预测的位置和主机的位置不符合,
不要立即瞬移位置,而是要先计算出如果按照主机位置的未来位置。
然后缓慢插值到这个未来位置。
)
实际运行的时候,蓝色曲线是本地预测运行线总是和追绿色曲线在未来交汇,当前永远交汇不了。
外插值插到了碰撞体里面,导致碰撞过大
内插通常用在大量不规则位移变化,rpg 角色移动(加速,跳跃,碰撞。。。)
外插用在大量惯性运动,载具,军队。。
命中判定
Client-side hit-detection
rver-side hit-registration
适合在场景很复杂的情况
判断方式
Hitscan 直线
Projectile 弹体
Projectile + Gravity 弹体加重力
非常简单的服务端检验
射击位置
命中位置
是否会碰撞
高效,手感好,非常不安全
作弊
短暂断网爆头
服务端世界和客户端世界不一样
当遇到关键事件,(开枪)时,
服务端回退到客户端开枪时间,执行开枪,然后回放中间指令至当前帧
服务端通常会慢客户端半个 RTT 时间
其他客户端会慢本地 1 个 RTT + 内插值时间
所以服务端需要猜测补偿半个 RTT 时间 + 内插值时间给客户端
需要服务器有快照 Buffer
延时补偿没法解决掩体问题
躲进掩体时在对方世界中还没进去,被服务端延时补偿杀死
开枪延时补偿是枪手优势,从掩体中出来击杀别人别人没法看到
给网络同步争取时间
先把反馈做出来,结算以服务端为准
)
)