Untiy 帧同步的探索之路一 位置帧同步

  • 环境
  • 使用到的技术
  • 未使用技术
  • 帧同步核心
  • 锁帧
  • 帧同步
  • UDP
  • 同步方式
  • 定点数数学库

帧同步技术是早期RTS游戏常用的一种同步技术。与状态同步不同的是,帧同步只同步操作,其大部分游戏逻辑都在客户端上实现,服务器主要负责广播和验证操作,有着逻辑直观易实现、数据量少、可重播等优点。

帧同步与状态同步相比各有各的优点。

不管我们当前用不用的到某些技术,但说不定我们以后会用到,所以多一份技术傍身,一方面是为了壮大自身,能找到更好的工作。一方面是多一份技术,就多一份自信,多一份能力。

本篇文章是帧同步系列文章研究学习之路的一个记录之一。

环境

客户端环境:Unity2018

服务端环境:PhotonServer

使用到的技术

  • 帧同步
  • 锁帧
  • UDP
  • 定点数学库
  • 强制同步帧

未使用技术

  • 随机种子
  • 帧同步物理系统
  • 预测
  • 回滚
  • 回放
  • 防作弊
  • 断线重连处理
  • 等等等等

帧同步核心

  • 相同时机+相同输入
  • 渲染与表现分离
  • 避免精度损失

遇到的问题:

1.亲测Untiy的物理系统不靠谱,会产生不同步,尽量避免使用Unity的物理系统,摇杆移动角色最好自己使用定点数加以控制保证其位置绝对性。

2.客户端在必要时需要进行锁帧,保证所有客户端帧数的一致性,否则会造成延迟。

锁帧

为什么会有锁帧这个概念,主要原因是为了达到所以客户端的帧数一致性。
为什么会出现帧数不一致性?
主要还是因为网络问题导致所以客户端无法准确的在同一时间收到服务端下达的游戏开始或者逻辑帧开始的命令,不同的网络环境下每个客户端收到的消息的时间有很大的不确定性,如果不进行锁帧,比入在游戏刚开始的时候,服务端下发了一条逻辑帧开始的命令,有的客户端网络好收到的比较早,有的客户端比较慢,收到的比较迟,这就会导致,先收到命令的那个客户端的逻辑帧已经跑到了5帧左右,而后收到的客户端逻辑帧才开始跑。这种帧数不同步的情况就已经是一个错误。会造成逻辑优先的那个客户端有很大的延迟,因为每个客户端的同步帧是服务器一次性下发的,而帧优先的客户端,在第5帧做了一些事件,这个时候服务器不会立即回复第五帧的消息,因为服务器会等待所有的客户端的帧事件到达之后,才会进行同步帧的发送。而由于另一个客户端的逻辑帧比较慢,就导致服务器被迫跟着慢逻辑帧的客户端进行同步,而你走的快,发送的帧自然要等待另一个慢的客户端走到这一帧了才会收到自己的帧事件,所以就造成了延迟。(这里初步暂时使用的为等待式同步,并不是自动填充空帧式同步,目的式为了踏出第一步)

在刚进入游戏时,进行锁帧,等待与其他所有客户端的帧id同步时,在进行帧同步逻辑。

帧同步

相同的时机+相同的输入=相同的输出=帧同步的核心基础

UDP

因为帧同步的数据量比较频繁,且对延迟要求比较低,鉴于UDP传输速度比较快,所有可靠的UDP传输是非常好的选择,因为UDP相较于TCP能把延迟给我们降到最低。

同步方式

这里初步暂时使用的为等待式同步,并不是填充同步,目的是为了确定帧同步方案可行性。

等待式同步:
服务器每隔固定时间进行一次同步,但同步的时候会端等待所有的客户端当前帧的数据到达之后,进行同步。

填充式同步:

服务器每隔固定的时间进行一次同步,如果到达了同步点有某个客户端没有发来帧数据,直接填充空帧,不进行等待,然后进行同步。

定点数数学库

使用定点数学库的目的就是为了避免浮点型在不同平台带来的误差,由于不同平台的硬件等环境不一致,在相同的数据情况下,不可能保证得出的小数点结果完全一致。哪怕是有一点偏差,次数上来了,偏差也就大了。因此,必须使用定点数学库,来确定不同平台以及不同客户端的结果的一致性。

下一篇:案例视屏地址:帧同步卡牌放置手游案例

努力积才能,壹叶便成名。

喜欢我关注我,更多干货等着你!

Untiy 帧同步的探索之路一 位置帧同步相关推荐

  1. 帧同步与状态同步:王者荣耀的帧同步方案

    以下为<王者荣耀>技术总监复盘回炉历程演讲全文 如今已经大获市场成功的<王者荣耀>一直是业内各方关注的对象,而我们也知道这款产品在成为国民级游戏之前,也遇到过一段鲜有人知的调优 ...

  2. amd同步多线程_流言终结者系列:第三代锐龙关同步多线程能增加游戏帧数?

    原标题:流言终结者系列:第三代锐龙关同步多线程能增加游戏帧数? 文 | Strike 关于AMD锐龙处理器玩游戏要关掉同步多线程(SMT)这传言其实已经流传已久,说真的这话放到以前可能还真的有这可能, ...

  3. 【计算机网络】数据链路层 : 选择重传协议 SR ( 帧分类 | “发送方“ 确认帧、超时事件 | “接受方“ 接收帧机制 | 滑动窗口长度 | 计算示例 )★

    文章目录 一. 选择重传协议 ( SR ) 引入 二. 选择重传协议 ( SR ) 帧分类 三. 发送方 事件 ( 确认帧.超时事件 ) 四. 接收方 事件 ( 接收帧 ) 五. 滑动窗口长度 五. ...

  4. Qt 实现数据协议控制--组帧、组包、解析帧、解析包

    数据传输中的组帧和组包 一.数据帧,数据包的概念 数据帧 组包 二. 程序实现: 2.1.frame(帧)类的实现: 2.2.Pack(包)类的实现: 三.测试 一.数据帧,数据包的概念 数据帧 数据 ...

  5. matlab视频帧间差分,matlab中视频帧间差分

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %本程序主要用于从视频中读入帧,并且进行从任意位置的连续两帧差分,差分的结果于阈值比较,从而提取出运动目标的轮廓,处 ...

  6. (栈帧和函数调用一)栈帧,函数调用与栈的关系

    (栈帧和函数调用一)栈帧,函数调用与栈的关系 一,栈帧的介绍 二,函数调用与栈的关系 三,汇编演示 四,总结 在计算机科学中,栈是一个特殊的容器,用户可以将数据压入栈中(入栈,push),也可以将已经 ...

  7. java 推流_JavaCV开发详解之2:截取推流服务器视频的某帧或本地视频的某帧

    引入依赖 org.bytedeco javacv 1.5.3 org.bytedeco javacv-platform 1.5.3 代码实现 package com.java.mmzsblog; im ...

  8. mbsfn子帧_区分小区内子帧状态的方法、装置以及系统_2008100004878_说明书_专利查询_专利网_钻瓜专利网...

    技术领域 本发明涉及通信技术领域,尤其涉及一种区分小区内子帧状态的方法.装置以及系统. 背景技术 第三代组织伙伴计划(3GPP,Third Generation Partnership Project ...

  9. html逐帧动画,CSS3动画之逐帧动画_html/css_WEB-ITnose

    要了解 CSS3 逐帧动画,首先要明确什么是逐帧动画. 看一下 维基百科 中的定义: 定格动画,又名逐帧动画,是一种动画技术,其原理即将每帧不同的图像连续播放,从而产生动画效果. 简而言之,实现逐帧动 ...

最新文章

  1. Spring事务配置探究
  2. 解密TDE加密数据库
  3. 终于弄明白 i = i++和 i = ++i 了
  4. UI控件(UIToolbar)
  5. 413 Request Entity Too Large
  6. 前端学习(622):变量的命名规范
  7. VS2017编译的一些小知识记录
  8. 你用计算机做过什么事情,他偷偷干了什么?(电脑)
  9. 毕业三五年,怎么拿到百万年薪?
  10. go channel
  11. tf.image.resize_images
  12. javascript实现文件下载
  13. 数学知识——高数速查手册
  14. FPGA信号处理系列文章——DDS的性能和误差分析
  15. 〖毕业季|进击的技术er〗其他人都在缅怀青春、告诉你如何拿到 offer 、提高自己的技术栈、做未来规划路线,我偏要反其道而行、告诉你们一个不一样的技术er的职场成长。
  16. oracle 修改pkg命令,oracle简单PKG(包)编写
  17. 苹果电脑上的Word打不开怎么办?Word文件怎么恢复?
  18. Unity3d 真实的植物渲染
  19. 【unity 保卫星城】--- 开发笔记08(太空站篇)
  20. 深入浅出Flask PIN

热门文章

  1. C#实现 javascript中的 charCodeAt
  2. SQL Server数据库学习笔记整理-数据类型
  3. Python办公自动化实战 10 | Python-docx库:Python与Word的完美结合_教你如何管理Word表格中的数据?让你庖丁解牛游刃有余
  4. 判断应用是否存在快捷方式的方法在很多手机上都无法得到正确的结果的解决办法
  5. 【找工作资料】英文面试问题集
  6. 有道云笔记和有道云协作视频教程-Array-专题视频课程
  7. 如何更好的学习和思考
  8. uni-app以及微信小程序页面跳转后实现页面自动刷新
  9. python祝福,用 Python 为老师送上节日的祝福
  10. webLogic内存溢出解决方案