网上玩球有好的安全的球球怎样被推荐观战一个呗

原标题:《球球大作战》50人同屏嘚客户端卡顿解决技巧

在5月13日Unite 2017 Shanghai 的案例分享专场上巨人网络的李东旭分享了《球球大作战》《(下文简称《球球》)客户端优化经验。 李東旭主要从两大方面做了分享一是《球球》的版本迭代问题,二是基于《球球》独特的游戏特性分享了同步、卡顿和地图实时显示三方媔的解决方案详细内容如下:

我是李东旭,来自巨人网络目前在《球球》项目组从事游戏性开发、功能开发还有系统优化工作。今天給大家带来的是《球球大作战》客户端优化经验分享主要分两块,第一块讲的是关于版本的第二块是关于遇到的一些问题,以及解决方案

先来简单介绍一下这个游戏,《球球大作战》是全球首款实时对战的休闲手游一经推出就受到Iphone、安卓双端球球怎样被推荐观战,迅速风靡全球取得众多佳绩,深受玩家喜爱目前该游戏已在全球100多个国家同步上线,并在苹果Appstore中国区游戏免费榜稳居Top10DAU超2500万的在线玩镓,上亿玩家已投入并热爱了这款游戏

怎么样做到三周一个更新版本?

《球球》是2015年5月份立项第一个版本两周后就上线了。这个版本主要是核心玩法两个人,一个前端一个服务器因为这个玩法比较新颖,无法预估玩家的情况所以第一个版本就尽快让它面对玩家,讓玩家来评估这个新颖的玩法的接受程度没想到一推出,玩家发现这个游戏非常好玩非常新颖,以前在手游上没见过之后我们就大仂地去推进这个项目,你可以看到下面这些版本,基本都是每隔两周最后三周就发布一个新版本。我讲这个地方的目的是什么目的僦是告诉大家, 我们这个版本推进速度是非常快的

其实直到现在,就是昨天我们也发了一个新版本基本这两年,每隔两到三周就发一個新版本这里跟普通的大型手游有区别,区别就是一般的大型手游他们的开发时间就耗时比较长,从立项到第一个版本见玩家基本僦已经大半年以上了。

这种情况下如果是有过大型游戏的经验还好,但是对那些没经验的团队来说这个危险性是非常高的。你不知道伱做的这些东西玩家喜不喜欢,很有可能就失败了失败程度概率是非常高的。

这里就给大家展示一下我们的 版本的一个迭代体系。峩们先有一个需求有一个需求之后,我们就进行开发开发完成之后就立马进行测试,OK的话就直接发布了这个周期就两到三周,两到彡周做完之后发布之后,然后下一个版本也是这样一个循环这样有一个好处,迭代非常快在做完一个核心玩法之后,马上发布出去來验证这个玩法到底好不好这个在游戏前期,效果非常好但是到后期,你的项目越来越庞大已经很难做到两到三周了。尤其是测试這一块测试的工作量越来越大,所以 这块我们引入了一个测试服的体系

我们单独做一个版本,这个版本比我们的现在版本功能要新许哆一些新的东西在里面。这个版本给部分玩家用来测试测试的话,就需要激活码这样保证一部分玩家能优先玩到新的功能,然后根據新的功能我们就根据玩家反馈来继续完善,OK的话就发布这个地方就跟MI ui的开发版跟稳定版挺像的,有了测试服之后也不是完全的完媄,在后面项目越来越复杂两到三周也很难达到,我们还是尽量在两到三周之内做完一个版本

为了更加完善我们的玩法,还有需求 峩们加入了一个玩家反馈的体系,有了这个体系我们在功能方面,能更正确地做一些选择这里的玩家反馈大概有这么多,主要的就是通过QQ群还有游戏反馈,还有玩家见面会这三个大块来直接面对面跟玩家沟通取得玩家的建议,尤其是每次版本发完之后有可能会遇箌一些问题或者bug,通过游戏内的反馈能及时看到一些问题,然后通过更新可以立刻解决。

第一部分已经讲到这里接下来我分享一下,在之前那些版本迭代过程中遇到的一些问题,以及我们怎么解决的主要是三个问题,第一个问题是同步问题第二个是卡顿的问题,第三个是我们年初的时候做了一个Lbs的玩法怎么把那个真实的地图显示在Unity里。

我们先看同步问题我们是一个实时对战的手游,在同步這块肯定免不了我们也在一些同步的机制上、模式上,也做了一些选择然后根据我们游戏的特性,选择合理的同步方案

《球球》的遊戏特性体现在哪?同步方案要怎么选择

一,《球球》这个游戏主要是球跟球之间的关系它们的关系规则简单,可以用公式来概括鼡的最多就是一些物理的公式,这些比较简单我们就很容易做出来。

二快速游戏,这个游戏中途可以随意加入退出而且我们的进入遊戏是没有载入时间,直接点击按纽就直接进去了。

三实时观战,玩家可以观战其他玩家在这种情况下, 客户端是没有任何操作的全靠服务器把数据发过来。但是这种特性我们也做了一些选择, 最终的方案是状态同步的一个机制模式这个模式有一些好处,就是開发效率比较高这个开发效率是相对而言,可能对别的游戏状态同步可能比较麻烦但是对我们游戏这种机制,其实开发效率非常高的然后客户端的计算量大大降低,方便性能优化就是客户端的一些球跟球之间的逻辑,因为用公式来概括的而且球跟球之间的计算,洇为球很多所以计算量非常大,这块客户端是不需要计算的直接通过服务器计算,然后把结果发过来因为是在服务器上算,这块反外挂过来也比较简单

四,断线重连因为计算都在服务器,所有信息都在服务器一旦断线,就可以立马连上去恢复当前的状态。传輸协议我们现在用的是TCP,TCP这块其实我们现在用的是,大部分情况下还好主要在延迟情况下,TCP比UDP要更差一点之后的话会逐步替代成UDP,或者是TCP和UDP共存的情况

我们看一下 服务器逻辑。其实第一个版本我们服务器是不参与计算的就是P2P的模式,客户端跟其他客户端相互连接服务器只负责转发客户端之间的消息。这种情况下发现延迟非常高因为手机跟手机之间,还有网络跟网络之间都是不一样的大多數情况下你看到一个球,另一个玩家就没看到然后他被吃了,他不知道怎么回事所以第二个版本就把计算全部挪到服务器上。 服务器這块也是模拟一个流程就是50帧每秒的刷新,模拟一个真实的环境发给客户端的话,就是10次每秒主要发一些球的坐标跟速度,还有吃哏被吃还有删球加球的逻辑。为了优化这个流量因为这种同步方式对流量要求比较大一点,所以我们对客户端发送的话 只发送客户端视野里的数据。

看一下 客户端的逻辑客户端的话同步方式就用了一个 影子追踪的方式,然后只发送操作数据这块服务器十秒一次地發过来,我要经过转化然后把它变成一个数据球,然后数据球的话是不参与渲染的,这个数据球在Updete里面一直在跑如果网络延迟,这個球还在跑保证这个数球跟服务器对应的球是同步在运动,不会因为网络的停止而停止移动渲染球主要跟着这个数据球作为一个插入岼滑,一直追着它跑 这样有一个好处就是,当网络波动的时候数据球可能会抖动,但是渲染球一直在平滑在玩家看来基本感觉不到。这个其实就是在网络延迟非常大的情况下还是因为卡顿,就是延迟玩家可能操作不太流畅,这块我们还在做深入的优化工作

《球浗》游戏内的特殊卡顿问题优化策略

第二个问题就是卡顿问题,卡顿问题基本大家都遇到过然后就是怎么优化的话,网上做优化的有很哆的方案这块就相同的优化点,我就不怎么详细说了主要介绍一下我们这个《球球》在卡顿这块的一些,因为特殊原因造成的卡顿是怎么优化的

卡顿一:光环、圣衣组建卡顿的处理

卡顿的话,大概就这么些《球球》主要卡顿点就在于,因为服务器是十次每秒刷新洇为是十次,不像客户端帧数比较高所以你发一次的话,这个数据量里面球的数量其实非常大的就引起了一个问题。问题是发过来这┅刻要处理大量的数据,会造成卡顿还有就是美术方面的问题,因为我们球上面挂了很多组件这些组件尤其光环和圣衣这个东西越莋越炫,会引起卡顿而且我们一局游戏,有50多个人而且中途还会再加入新的玩家,如果提前进这局游戏之前把所有东西都加载到这個内存是肯定承受不了的。而且我们加载是没有立即进入游戏这就造成一个问题,我们必须要在玩的过程中来加载美术资源这样也会引起卡顿。

遇到一个卡顿的话我们得找这个卡顿在哪里?然后找到的话我们得分析是由于什么东西造成的。《球球》这块刚才也整個介绍了一下,主要就是这两个地方先看一下球体组件的加载,球体组件的话我们光环跟圣衣现在已经有几百多个了,有三百多个朂坏的情况下,可能每个玩家用的光环跟圣衣都不一样这样在一局游戏里面都显示出来的话,对游戏的内存及其渲染,其实压力非常の大这个只是一部分,主要是光环 现在玩家审美要求越来越高,我们做的东西也越来越炫这样造成非常多的卡顿,接下来给大家介紹一下我们是怎么优化这块美术这块优化,这次没怎么讲因为网上美术这块怎么优化有很多,我主要讲是怎么加载的

我们先看一下組件的构成,一个球本体是一个球这个球其实是一个2D的一个慢视平面的,然后名字名字这块我们是用自己做的一个,等于是自己写 洎己写的好处就是效力比较高,可以走Unity自己的那个合P(音)流程然后那个国旗也是一个慢视,不是用UI做的还有光环、拖尾圣衣,还有箭头这些加载压力都非常大的。我们是怎么优化这块优化主要用到分帧处理。

分帧处理大家应该多少都了解到就是把一堆大量的计算铨部拆开来分散到到各个帧里面,这样的话帧数就很平稳不会出现一个大的CPU曲线的波峰。每个球依次进行加载一个球加载完了,再加载另一个球这样的好处,有可能球2还没有加载完就已经被吃掉了,这样有一个好处我们就减少了大量的计算,大量的加载而且玩家看的话也是比较流畅,不会出现突然画面不动然后又开始动了的那种情况。

卡顿二:大视野大量球的刷新卡顿

然后优化后我们发現帧数是上来了,但是还是有很大的波动这块主要原因就是 大视野大量球的刷新卡顿。因为我们的游戏视野是不固定的不像其他游戏視野一直固定的,在同一屏里面看的东西基本不会高的太多我们游戏就不同了。有可能一个屏幕里面可能看到成百上千个元素还有物體。而且玩家在玩的过程中如果玩得好的话,视野是来回变动的服务器发数据的话,因为只发我们看到的数据所以我们玩家在来回切换的情况下,服务器发的数据也是很多的就是大量的球跟添加删除,这样的一个操作对客户端的压力也非常大所以客户端的话,就需要做一些计算一些处理, 这里就很考验一个场景管理的框架

策略:双缓冲列表和分帧添加与删除

然后这块我们主要是有两个策略,僦是双缓冲列表还有分帧添加和删除分帧这块在组件加载那块已经讲过了,逻辑差不多双缓冲列表简单来说,就是两种列表第一个僦是添加列表,第二个就是删除列表有了这个列表,在实际加载球的过程中我们可以有列表作为缓冲。这个好处就是有了缓冲如果囿重复的球,我们就不需要重复地进行加载所以在这个列表里面进行合并或者去除。

比如说当一个新加载球要过来的时候我们如果判斷这个,或者判断这个场景里面有这个球或者这个列表里面有这个球,我们就可以不用处理如果一个删除的球进来的话,我们判断这個删除列表里面已经有了这个球我们也可以不用处理。或者就算没有可以看到如果添加列表里面有,我们可以把添加列表里面要删除嘚球去掉这样我们就能省掉很大量的工作。这块的话又引出了一个问题,因为列表是用List(音)如果要找这个列表很长,可能有几百個元素用List的话,因为要一个个辨别效率非常低,我们就把List和字典做了一个结合既查找得快,也能删除得快

分帧添加删除这块,跟組件加载不一样的地方每一帧加载或者删除的元素是动态变可以根据手机帧率,如果手机帧率特别高可以每帧处理的元素就很多,如果帧率低了我们就可以动态地减少,这样可以控制手机帧率来回波动的情况

看一下优化的效果,大概是这样的效果优化后整个波动僦比较平缓,大家可以看到上面有一些小波峰,就是一些处理的结果但是很难出现那种大的波动,这是一个理想的情况其实玩的过程中,还是会出现波动情况因为美术资源那块有一个东西如果非常大的话,也会造成一定的影响这块美术资源后期我们会做一个低端機型的美术资源包来替换,这样可以保证在低端机上能流畅玩下去

LB玩法的地图显示技巧

第三点,我们讲一下地图的一个显示年初的时候,我们打算做一个BS的玩法因为之前有口袋妖怪结合了地图和游戏玩法相关的,当时在没研究之前我是觉得挺简单,就把地图显示进來后来做的时候发现,其实非常难难点主要在于你怎么把地图显示进来。因为我们不是专门做地图的我们没有数据,就算有了数据我们不知道怎么来画出来,显示出来当时想到的一个比较完美的方案就是地图就在Unity里面,然后我们可以依托上面可以做一些复杂的操作,可以放一些模型什么的这是我们的目标。

没有现成方案和高德合作寻求SDK技术支持

实际执行的过程中发现,其实没有现成的方案就是参考国内的SDK,发现没有专门给Unity做SDK的一个SDK吧然后他们的话主要效果就是Unity的渲染跟SDK的渲染,它们是相互独立的你想看地图得切到SDK那個上面去,这样的话Unity的一些UI就看不见了如果你要做一些UI操作的话,就必须在底层SDK那块再写一套,再写一套是可以因为市面上有一些遊戏是这样做过,但是有一个问题你这样做出来的UI,只能做的非常简单很难做一些复杂操作。

比如说你在游戏里面其他界面因为玩镓有可能会查看其他网页的信息,这个信息界面又要在游戏里面做一遍我们玩家的个人主页其实非常复杂,里面有非常多的东西如果偅新做一遍,一个是难度比较高因为在底层做不好实现。第二个就是时间的话要求也非常紧可能也做不到。当时看到口袋妖怪他也昰能在Unity里面做的,我们就很好奇他怎么做的他跟谷歌有深入合作,就是谷歌专门给他做了一套东西让他在Unity里面显示出来。这块我们询問了大量的SDK的工作人员好消息就是,我们找到了高德 跟高德深度地合作,我们给他提供Unity的一些技术他们提供SDK的技术,我们深度合作通过Unity底层,因为Unity刚好发现了一个底层接口可以把我们Unity那边的图像传到SDK,这样SDK就不用渲染在页面上就渲染在图片上。我们就在SDK里面看箌就实现了可以看到地图。而且是SDK本身在画所以这个效率非常高的。

折中策略:图片加载式的地图实现方式

我们就实现了一个浏览器嘚功能就可以把地图按照一块一块的图片来加载下来,来显示在Unity里面这是一个折衷。当时这种方案有两个问题,第一个问题就是流量比较大而且有可能某一块地图,可能加载不当可能就显示不是特别好,而且因为是真正的图片斜着看,那些字都是斜的很难有竝体的感觉。幸好最后做成这样了一个效果这样玩法的话,玩家也是非常喜欢的这三个问题,我已经讲完了整个PPT我已经讲完了,现茬还有一点时间大家有什么问题可以问。

提问:我想问一下地图这方面作为地图有没有想过,有没有两层一直混着做

李东旭:试过,确实试过但是这样对手机的发热非常严重,就抛弃了这个方案

提问:是因为浑本身,还是底层

李东旭:Unity在渲染,sdk一个渲染而且咜们两个,因为都走渲染流程而且是混合,是两个渲染所以它的计算量非常高,而且发热非常大

提问:后来用这个合作的方式,这個资源管理是在Unity里面做是在高德那边?

李东旭:地图是高德上面的元素UI是Unity。

提问2:你好我有一个在同步那块的问题,就是看到你们昰用的状态同步定期的每秒去同步十次,信息给所有玩家这样当你屏幕中看到的玩家非常多的状态下,可能数据量非常大那时候有沒有想过借鉴一些所谓帧同步的概念?

李东旭:这块我们也考虑了因为确实数据量很低,但是我们的球很多球跟球之间的判断如果放茬客户端的话,计算量就很大了

提问2:也就是你们的考虑,是做计算的压力比较大

李东旭:对,球非常多会呈一个几何倍数在上升,我们做过

提问2:一个球会跟多个球发生各种情况的物理碰撞?你们有没有什么好的方法可以解决同屏特别多的时候,减少网络的流量这个几百人在屏幕里面,每秒发十次包那个包也很多,带的数据就是倍数这种大小

李东旭:这块的话其实不一定是每秒十次,如果不动的话频率就降下来,就不需要发数据如果数据量真的大的话,可以自己写的一个压缩机制 因为我们的球的位置还有速度这些嘟是很统一的,我们可以自己实现一个非常高效的压缩方案使得数据非常低。

提问2:但是传的浮点是

李东旭:整数,客户端在做处理

提问3:你刚刚提到地图,都是图片你看起来一开始那个字是斜的,后来你提到幸好后来做成这样的方案你是怎么做到后来不是斜的?

李东旭:因为这个是高德他做出来的高德那边内部机制也是一个摄像机在看一个斜的地图,这样的话自己画字就竖着版,出来的字僦是立体的

提问3:还有老师你刚刚提到分帧处理,根据不同设备的性能去每一帧处理球的数量是不同的,我想知道怎么去知道这个手機性能从而改变每一帧处理这个球的数量?

李东旭:主要是根据那个实时帧数可以看到帧数,可以根据帧数做一个公式计算出每帧夶概要处理多少个球。

李东旭:时间已经OK了然后谢谢大家。

关注微信公众号:游戏陀螺(shouyoushouce),定时推送游戏行业干货分享、爆料揭秘、互动精彩多。

游戏中发生卡顿大多数情况都是洇为网速太慢而造成的因为网速造成的卡顿也很好解决,基本只需要换一个网络就可以了有些人卡顿的原因是因为手机的性能不够或掱机内存占用太大。下面具体分析:

1. 游戏中发生卡顿大多数情况都是因为网速太慢而造成的测试的方法很简单,只需要去观战别人就可鉯知道了如果我们观战别人时发现也出现了卡顿的现象,(经常提示“正在重新连接”)则基本可以肯定是我们网速的问题了。

2. 因为網速造成的卡顿也很好解决基本只需要换一个网络就可以了。比如之前是使用WiFi则可以切换成4G网络。

3. 有些人卡顿的原因是因为手机的性能不够或手机内存占用太大我们可以试一下退出球球大作战,使用一下其他的软件如果同样是卡顿很久才能进入某个软件而且还会发苼卡顿,就可以基本肯定是手机的问题了

4. 手机性能原因造成的卡顿只能通过换一个手机来解决。如果是占用内存太大造成卡顿可以选择清理一下手机里的垃圾或者卸载一些软件

你对这个回答的评价是?

我要回帖

更多关于 球球大作战怎么上推荐 的文章

 

随机推荐