首页 > 修改教程 > gg修改器游戏为什么会闪退_gg修改器改好了总是闪退游戏
gg修改器游戏为什么会闪退_gg修改器改好了总是闪退游戏
  • gg修改器最新版
  • 大小:11.64MB版本:v4.89
  • 语言:简体中文系统:Android
绿色无毒,安全可靠!部分设备误报拦截请通过!

gg修改器游戏为什么会闪退_gg修改器改好了总是闪退游戏

作者:佚名 来源:网友分享 日期:2024-03-29 09:13:19

大家好,今天小编为大家分享关于gg修改器游戏为什么会闪退_gg修改器改好了总是闪退游戏的内容,赶快来一起来看看吧。

如今已经大获市场成功的《王者荣耀》一直是业内各方关注的对象,而我们也知道这款产品在成为国民级游戏之前,也遇到过一段鲜有人知的调优期。也就是在2015年8月18号正式不删档测试版本推出之后,被腾讯评级为不达六星之后的时间。

据了解,在8月之后的两个月间,《王者荣耀》技术团队对这个产品进行了非常深度的优化,并攻克了局内同步、网络要求,以及性能表现的三大难关,成功达到了腾讯六星产品的标准。比如延迟、卡顿等不同步问题的出现概率从过去的1%,降低到了0.01%,大幅度地改善了游戏体验。

今天在Unity举办的Unite 2017 开发者大会上,《王者荣耀》项目组技术总监邓君针对这款游戏的调优历程进行了复盘,回顾了这款产品在技术层面遇到的三大问题,以及他们的解决方案。

值得一提的是,参会的开发者也非常关注这次的演讲内容,不仅会长当中人员爆满,围住了整个演讲场地,在演讲结束之后,葡萄君也听到一路上诸多开发者对《王者荣耀》技术经验的探讨。

这次的主题主要是讲一下《王者荣耀》从立项之初经历的惨淡时期到华丽的翻盘,包括碰到技术方面的问题,以及游戏方向上的改变。

我是技术出身的,整个课题也是技术面的,会重点介绍王者荣耀和现在见到大部分不同的技术方案,它实际原理、问题和优化的思路。

现在了解《王者荣耀》或者在玩的人确实比较多,但是我们曾经也没有想过它有这样的结果。当时端游很久都没有做出来成绩,业绩和收入都面临比较大的问题。2012、2011年前后,《霸三国OL》做到1.0版本,游戏中玩家需要控制多个单位,操作起来很难,一开始可以操作5个单位然后变成3个,但即便只有3个单位,操作也让人觉得也很痛苦,于是我们慢慢5个单位的技能合在一个英雄身上,不断地优化。能看到,在MOBA领域,你要做创新,还要脱颖而出,是很难的事情。

在2014年底,2015年初的时候,我们准备组建一个手游团队。因为当时国内市场基本上都在开发手游,能够继续开发端游或者要准备立项端游的非常少,包括腾讯也只有2、3款端游在开发。手游是一个机会,我们当时就希望在2015年把我们的《霸三国OL》端游在手机上呈现。

这个时候我们进行了一个初期Demo的验证,做Demo的只有三个人,引擎、框架、后台,一系列制作下来大概花了两周到三周的时间。这个Demo里有基本的进游戏、选人,然后可以释放技能,正常的战斗,到结算。

Demo的引擎我们采用了Unity,做完之后也觉得Unity很好用,开发效率确实比较高。

2014年年底的时候,我们制作人去公司开会,当时做一个非常明智的决策:我们需要马上暂停端游的开发,直接做手游。就是这样的一次决策,真正地扭转了我们整个团队的命运。如果晚一年,可能今天爆红的MOBA游戏就是另外一个,而不是王者了。

于是接下来在2015年,我们才有了想法开始独立招聘20、30人来做这个手游项目。

从端游转型做手游,肯定要面临选择,到底要用什么样的引擎,采用什么样的方案进行手游的开发。当时,腾讯以及成都周边的创业团队,基本上都用Unity,我们做Demo的时候,也选择大家用过的,已经有产品进行验证的引擎,同时我们也考察它适不适合我们的团队。

Unity在我们当时做Demo时的理解来看,它确实对中小团队,甚至对一些大型项目来说,都有几个比较明显的优势。

1.易上手,我们花三周就可以做出Demo,可以看到易上手是它的一个非常大的优势。

2.它的工具都是很完善的,能够做到一站式解决,你不需要在这里面下载工具,那里面额外补充一些插件。

3.它插件资源很丰富,我们从最开始做Demo的时候,基本上都可以从Asset Store中找到一些可以用来验证我们想法的资源,可以加快我们开发的效率。

4.上面这三点加起来,就能体现出它非常明显的优势,即开发效率特别高。

5.它还有跨平台的优势,它本就是跨平台的引擎。

6.最后它还能让你更方便地补充技术人员,社招也很容易招聘到熟悉Unity的开发人员。

对比以前我们自己做引擎,或者用过其他的引擎,从效率上来讲,最终我们选择了一个开发效率最高的引擎Unity。

而另一种同步策略是帧同步。

这种技术应用的很广泛,最早的《星际争霸》《魔兽争霸3》都采用了帧同步,他们都基于局域网运行,网络的条件非常好,也不需要服务器就能搞定。帧同步的优点有几个:

第一,它的开发效率比较高。如果你开发思路的整体框架是验证可行的,如果你把它的缺点解决了,那么你的开发思路完全就跟写单机一样,你只需要遵从这样的思路,尽量保证性能,程序该怎么写就怎么写。

比如我们以前要在状态同步下面做一个复杂的技能,有很多段位的技能,可能要开发好几天,才能有一个稍微过得去的结果,而在帧同步下面,英雄做多段位技能很可能半天就搞定了。

第二,它能实现更强的打击感,打击感强除了我们说的各种反馈、特效、音效外,还有它的准确性。利用帧同步,游戏里面看到这些挥舞的动作,就能做到在比较准确的时刻产生反馈,以及动作本身的密度也可以做到很高的频率,这在状态同步下是比较难做的。

第三,它的流量消耗是稳定的。大家应该看过《星级争霸》的录像,它只有几百K的大小,这里面只有驱动游戏的输入序列。帧同步只会随着玩家数量的增多,流量才会增长,如果玩家数量固定的话,不管你的游戏有多复杂,你的角色有多少,流量消耗基本上都是稳定的。这点延伸开来还有一个好处,就是可以更方便地实现观战,录像的存储、回放,以及基于录像文件的后续处理。

帧同步也有它的缺点。

第一,最致命的缺点是网络要求比较高,帧同步是锁帧的,如果有网络的抖动,一段时间调用次数不稳定,网络命令的延迟就会挤压,引起卡顿。

第二,它的反外挂能力很弱,帧同步的逻辑都在客户端里面,你可以比较容易的修改它。但为什么《王者荣耀》敢用帧同步,一方面是因为当时立项的时候开发周期很短,半年时间要做上线,要有几十个英雄,存在时间的压力,另一方面,MOBA类游戏不像数值成长类的游戏,它的玩法是基于单局的,单局的作弊修改,顶多影响这一局的胜负,不会存档,不会出现刷多少钱刷多少好的装备的问题,而且作弊之后我们也很容易监测到,并给予应有的惩罚,所以我们认为这不是致命的缺点。

第三,它的断线重回时间很长,相信台下也有很多王者玩家,也曾碰到过闪退以后重回加载非常长的情况,甚至加载完以后游戏也快结束了,这是帧同步比较致命的问题。

第四,它的逻辑性能优化有很大的压力。大家应该没有见到哪一款大型游戏是用帧同步来做的,因为这些游戏的每一个逻辑对象都是需要在客户端进行运算的。如果你做一个主城,主城里面有上千人,上千人虽然玩家看不到它,但游戏仍然需要对他们进行有效的逻辑运算,所以帧同步无法做非常多的对象都需要更新的游戏场景。

我们选择了方案之后,当时觉得很high,觉得这样一个技术方案开发起来得心应手,效率如此之高,做出来的效果也很好。

但事实上,它也有好的一面,也有坏的一面,技术测试版本上线后质量不好,其中技术层面遇到的问题就是下面这三座大山。

第一是同步性,同步性这块容易解决,其实也解决了;

第二也是最大一块网络问题,帧同步它的网络问题导致我们对它技术方案的原理没有吃透,碰到了一些问题,那时候游戏的延迟很重,画面卡顿,能明显感觉走路抖动的现象;

第三是性能问题,这个问题始终存在,我们也一直在优化。

右边写的是实现要点,这是我们在解决第一座大山经验的总结,也是我们实际开发过程当中做的事情。

首先,我们所有的运算都是基于整数,没有浮点数。浮点数是用分子分母表达的。

其次,我们还会用到第三方的组件,帧组件也要需要进行一个比较严格的甄别。我们本身用的公司里面关于时间轴的编辑器里面,最初也是是浮点数,我们都是进行重写改造的。

再次,很多人初次接触帧同步里面的问题,就是在写逻辑的时候和本地进行了关联、和“我”相关,这样就导致不同客户端走到了不同的分支。实际上,真正客户端跟逻辑的话,要跟我这样一个概念无关。

接下来还有随机数,这个要严格一致。这是实现的要点,严格按照这上面的规则写代码还是有可能不同步,本身就很难杜绝这样的问题。

最后,真正重要的是开发者要提升自己发现不同步问题的能力,什么时候不同步了,不同步你还要知道不同步在什么点,这是最关键的。你需要通过你的经验和总结提升这样的能力。这个能力还是通过输出来看不同客户端不同输出,找到发生在什么点。

比如在《王者荣耀》里,我们看到不同步的现象应该是这样,有人对着墙跑,你看到的和别人玩的游戏是不一样的,就像进入平行世界。

最开始测试《王者荣耀》的,我们希望不同步率达到1%,就是100局里面有1局出现不同步,我们就算游戏合格,但实际上对于这么大体量游戏来说,这个比率是有问题的,经过我们不停的努力,现在已经控制在万分之几,一万局游戏里面,可能有几局是不同步的。

这个问题不一定是代码原因或者没有遵循这些要点才出现的,有可能是你去修改内存,你去加载资源的时候,本地资源有损害或者缺失,或者是异常。说白了,你没有办法往下执行,大家走了不同分支,这都可能引起最终是不同步的。

如果你不同步概率比较低,到了这种万分之几概率的时候,很难通过测试来去还原,去找到这样不同步的点。

最开始我们游戏出现不同步的时候,就是在周末玩家开黑多的时候,随着你的概率越来越低,基本上你就自己就还原不出这些问题了,只能依靠玩家帮你还原这样的场景,来分析这样的不同步问题。

同步性遵循这样的要点,按照这样的思路来写,加上你不同步定位的能力,有了监控手段能够去发现,这个问题其实就解决了。解决之后,你就可以好好享受帧同步的开发优势。

第三座大山,是我们对性能的优化。

本身帧同步逻辑上面在优化上面存在一些缺点,所有的角色都需要进行运算。这方面我们也是借助Unity的特性,如果你想追求性能上的极致,有些东西你需要寻求好的方式。

第一点是热点的处理。

我们是不用反射的,它都有GC性能开销,我们的做法里面,会把对象的显示隐藏放在不同的渲染层里面,尽量让整个游戏帧率是平滑的过程。还有我们本身有自己的系统,比如AI,在《王者荣耀》这样的多角色游戏中,你如果想要做出比较好的体验,那么AI就要做得比较复杂。

而要去优化热点,我觉得就只有这三个步骤可以走。

首先,从程序的结构上面能找到更优的,它的优化效果就是最明显的其次,如果你的结构都是用的最好,就去挖掘局部的算法,调整你代码的一些写法。最后,如果局部的算法都已经调到最优还是没有什么办法,那只有一条路,就是牺牲整个质量,就是分帧降频。

第二点是GC这块刚才说不用反射,还有装箱和拆箱的行为也是尽量少用。Unity指导过我们的优化,从GC上面的考虑,他们建议每一帧应该在200个字节以内是比较好的状态,其实很难做到,王者也是每一帧在1k左右,很难做到200。

第三点是Drawcall,这些传统的优化手段大家都用的很熟了。

第四点是裁剪,帧同步里面是不能裁剪的,表现里面我看不到的可以降低频率或者不更新它,这在表现里面可以做的。

第五点是3DUI的优化,比如《王者荣耀》的血条、小地图上面叠的元素等等,这些UI都比较丰富,这块我们用了31UI的方式来优化,没有用UGUI里面进行血条方面的处理。

我们也牺牲了一些东西,我们把所有东西都加载了,在游戏过程当中,我们希望不要有任何IO行为,包括输出我们都是要布局的。你处理的决策和复杂度,如果在一帧里面放出100颗子弹,在放100颗子弹的时候一定要掉帧的,一定要在力所能及的时候把这些东西做到极致。

今后,我们也有几个计划。

第一,我们考虑能不能在热更新上面有所突破。因为王者这样一个游戏类型,包括它的体量,我们对于性能有一个比较极致的追求,不会轻易使用脚本层面在性能层面本身就不是最好的。这个我们要去研究的就是热更新,性能最好的方式。

第二,我们也在和硬件厂商沟通,他们希望游戏能够真正发挥多核性能上的优势,大部分的游戏在单核上面,把一个核吃的满满的,很多时候我们现在得出的结论,GPU性能也很强,王者并没有对GPU占满,可能只用了30%,CPU反而吃的比较满,吃满以后它还有另外一个坏处,它的发热、降频,你如果用多线程、多核去尽量平坦,让它不要处于高频的工作方式,反而会有更好的效果。

第三,我们现在用的是Unity 4.6版本,但Unity已经进化到5.7版了,后面他们还会推出新的特性,我们希望结合一些Unity新特性,现在已经有些游戏用5.6可以提升性能。

最后,不光是提升性能问题,Unity在多线程的渲染,也有很好的作用,使用引擎优势也是很必要的。随着性能的提升,我们会对王者的画质进行升级。

好的,我今天的演讲就到此结束了。

-->

相关文章

热门下载

大家还在搜