游戏里的帧同步机制

游戏同步机制

在多人对战的游戏中,游戏的每一方客户端需要保持每一个时刻大家的数据是一致的,常见的同步方式分为帧同步和状态同步,帧同步服务器不需要知道游戏逻辑,只是将客户端的操作进行转发,然后客户端自己计算逻辑,状态同步是服务器计算游戏逻辑,并将角色状态返回给客户端,客户端直接使用服务器返回的状态即可。常见的RTS,Moba一般是帧同步,mmorpg一般是状态同步。

帧同步的概念

总所周知,游戏是一帧一帧渲染在屏幕上的,我们一般称之为渲染帧,渲染帧是不稳定的,如果一帧计算的东西太多或者画面太复杂,这一帧的时间可能会比较长,同一款游戏在不同的CPU,显卡上,渲染帧也是不尽相同的。而帧同步的帧是指逻辑帧,非渲染帧。我们以2台手机为例,他们需要同步,意味着他们的数据是一致的,如何保证他们数据一致呢,保证它们的起始状态是一致的,执行操作的时间是一致的,执行的操作是一致的,那么2台机器的结果一定是一致的。假如我们将游戏固定为1秒20个逻辑帧,即每50ms执行一次逻辑帧,2台手机都将在第5帧的时候执行A的移动操作,都将在第12帧的时候执行B的攻击操作,这样2台手机无时无刻不保持着一致,这就是帧同步的概念。

帧同步的准备工作

在做帧同步之前,需要头脑清晰的知道所有的游戏逻辑都需要拆成每个逻辑帧去执行,例如计算伤害,生命恢复等,这些都是在每一个逻辑帧去做的事情。游戏按照你的逻辑帧,不停的计算着数据,这样游戏就按逻辑帧走起来了,至于渲染到屏幕上,渲染30帧还是60帧,跟你的数据运算没有关系。

带关键帧的帧同步实现流程

  1. 设定游戏的逻辑帧率和关键帧率,在这我们假定游戏1s执行20个逻辑帧,每5帧是一个关键帧。
  2. 服务器1s向客户端广播所有的关键帧,在这,服务器每1s向客户端广播4次关键帧,每次广播内容为上一个关键帧到这一个关键帧之间玩家的所有操作,例如A在第7帧要执行移动命令。
  3. 客户端收到服务器广播的关键帧后,开始执行所有的帧操作,例如A在第7帧要执行移动命令。如果这段时间没有任何操作,意味着这段时间玩家没有操作。游戏每一帧都要执行正常的游戏逻辑,该回血的回血,该攻击的攻击,跟关键帧是否携带操作信息没有关系,只要收到关键帧,则一直执行到当前收到的最大关键帧为止。
  4. 客户端的每次操作不会立即生效,而是上传给服务器,客户端执行操作的时间都收到服务器发送的为准,服务器保证的是所有客户端都以同一帧执行该操作。

流程图如下:


帧同步流程图

细节相关

  1. unity的Update是渲染帧的每一帧,请勿将逻辑直接写在Update里,一次Upadte可能会跑好几次逻辑帧,也可能一次都不跑,但是可以用Update去调用逻辑帧的Update,需要自行判断当前时候可执行逻辑帧,以及应该执行几次。
  2. 客户端上传操作的时候,加上预计该操作执行的帧,因为客户端的帧比服务器的慢,加上网络延迟的原因,客户端实际执行该操作以服务器校验后的为准,比如A在第5帧做了移动操作,我们传给服务器的是预计第10帧进行移动操作,如果服务器收到该条命令的时候,还没有向客户端广播过第10帧的内容,无需额外设置,如果服务器收到该条命令的时候已经广播过第10帧的内容,则需要将操作的帧自动往后顺延到下一次的关键帧内。
  3. 抛弃掉浮点数,因为浮点数的运算跟CPU相关,不同设备计算出的浮点数会有误差,任何误差对帧同步都是大忌,可以自己实现一套浮点数,最简单的就是存成long类型,通过倍数转换实现,1000代表浮点数的1,0.001用1表示,自己按这套规则去运算就可以了。
  4. 随机数也可以自己实现一套,利用相同的种子,随机数就是一样的,这个也是在帧同步中必须保证的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容

  • 帧同步在网上可以搜的资料比较少,关于游戏的更是没有,不过,实现的原理也比较简单,最近几天就写了份关于帧同步的文档,...
    某人在阅读 4,900评论 2 12
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,517评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,103评论 18 139
  • 农药自从上线以来,依靠着强大的产品力以及腾讯的运营能力,在游戏市场上表现可谓是风生水起,根据第三方的调研数据显示,...
    温冷月阅读 1,948评论 0 3
  • 这是我读的宁远的第二本书。第一本《把时间浪费在美好的事物上》曾经很多次给我带来安慰。相信这本《有本事文艺一辈子》也...
    Holly兔小妖阅读 384评论 0 0