《王者荣耀排位靠运气》我认为运气才是王道,那些天天说技术的人,看到这张载图会让你绝望,我说下情况,李白和韩信

(完结)“王者荣耀”产品分析 - 简书
(完结)“王者荣耀”产品分析
一、文档概览和分析目的
分析目的:了解《王者荣耀》的产品战略、产品功能和产品表现等产品特性;了解手游市场内的竞争态势和发展方向;分析《王者荣耀》成功的原因及其对应的策略二、产品简介名称、类型、LOGO、slogan介绍、定位、特色(定位:基于微信、QQ社交关系链基础上的MOBA类手游)三、市场分析截止2015Q3,中国手游用户累计达到4.97亿人,环比增长1.2%,手机游戏用户规模已逐渐见顶。
一直到2016年底,中国的手游用户规模也只达到了5.23亿人,增速低于5%地方。在游戏类型方面,红海市场游戏类型已趋于饱和,MOBA、3D动作、沙盒等蓝海市场有待探索。
2015年的第三季度,MOBA类手游居然还是一片蓝海的市场
2016年的第四季度,即时战略/MOBA类手游高居最受欢迎游戏类型的榜首
四、用户分析和需求分析
4.1目标用户群分析
《英雄联盟》的主要用户人群:
《英雄联盟》的用户年龄中11-20岁的最多,其次是21-30岁
男女比例,女性占比不足10%
【结论:《英雄联盟》是一款更加具有挑战性和上手难度的游戏,把一大部分的女性用户排除在了门外】《王者荣耀》用户:【原MOBA类游戏例如《英雄联盟》用户】【有手机端休闲游戏的经验,但MOBA类游戏经验基本为零的小白玩家】【广大的女性手游玩家】结合手机端游戏的特点和腾讯社交化的优势,充分考虑上手简单和女性玩家的游戏基础等因素,开发出一款可以让几乎所有人快速上手的游戏。他们放弃不了手机端的社交特性和多年来手机游戏培养出的更加广大的小白和女性用户群体,也不会忽视在MOBA类游戏当中,女性玩家比例的增加能够带来的大量的男性玩家,更加不会去忽视微信和QQ能够给《王者荣耀》带来的流量和社交的决定性的优势。【结果:《王者荣耀》玩家的主要年龄为24岁以下,并且妹子玩家已经到达了40%】
4.2核心用户群定位与需求分析
从《英雄联盟》等MOBA类端游转过来的端游核心玩家们:【MOBA类游戏的重度玩家,有着多年的MOBA端游经验】【培养起了对于MOBA类游戏的喜好和印象,有明确的英雄、位置等的喜好】【对于手机端游戏的需求是简单而又明确的,“像”,界面风格,英雄技能,操作习惯、地图、野怪还是分路,他们已经喜欢上了一套固定的模式,你只需要游戏品质过关,并且在手机端把这些模式尽可能的给予他们,他们就会来买你的帐了】【碎片化时间里,希望《王者荣耀》能够暂时替代LOL】4.3一般用户群定位与需求分析通过朋友介绍,或《王者荣耀》火到没人不知道了才下载下来玩:【年轻人,愿意尝试新鲜的事物和游戏】【有手游经验,但之前基本上没有接触过MOBA类手游】【不是重度游戏玩家,只是把游戏当做一种消遣】【喜欢找到人一起玩和讨论一款游戏,有社交化的需求】【在无聊或者碎片化时间的情况下才会玩一会游戏】在和人社交的过程中,能有一款简单方便而大家又都认可的游戏来拉近人与人之间的距离,丰富社交的形式。4.4用户需求分析手机端精品游戏的需求:手机端的游戏,缺少足够多的精品手游碎片化娱乐的需求:智能手机的发展使得用户的碎片化时间更多了,利用手机“杀死”碎片化时间,游戏就是一种可以说是最好的方式(更加沉浸式的体验)社交需求:只有人与人之间的互动才是最具有用户粘性的。和传统PC机时代不同,用户在用手机玩游戏时的场所和时间更加的多样化公平的需求:希望游戏的体制是公平的,能够保证个体在游戏这个小社会内的生命权和发展权类《英雄联盟》游戏的需求:手游能够平衡竞技与娱乐,耗时相对较少,玩家更易上手和利用碎片时间。用户很可能会有在手机端也想玩《英雄联盟》等游戏的需求。4.5 总结《英雄联盟》是《Dota》的简化版,《王者荣耀》由于定位于手机端,它必然需要简化,它的用户人群就一定会扩大,既然要出现社交的因素,那么游戏的上手难度就必然要进一步降低,直到能够让小白和女性用户入手,从而达到社交化的用户基数要求。五、产品分析5.1产品功能结构图
5.2产品版本更新路线《王者荣耀》团队几乎是一个月一次版本和功能的大更新,主要更新的方向就是社交、玩法和电竞。他们早已经发现了社交对于手游的重要性,并且最终使得这个游戏变成现实生活中人与人之间社交的一部分,而《王者荣耀》要走的,就是这样的一条游戏+社交的道路。
5.3产品核心功能分析
5.3.1简化的王者峡谷对战模式
《英雄联盟》的玩家都能够无缝接入《王者荣耀》这个游戏,从而获得第一批的核心用户。王者荣耀又再次凭借着简化《英雄联盟》的操作模式,吸引了一大批妹子用户和根本不玩游戏的低操作水平用户。
阻止最普通的用户进入《英雄联盟》的原因到底是什么?
【《英雄联盟》角色操作的自由化带来的操作的复杂化】
【地图视野的黑暗带来的运营复杂化】
【装备系统和商店的多样性带来的选择恐惧症】
《王者荣耀》具体采取的策略:【双轮盘锁定的操作模式,不需要选择目标自动攻击,适合小白玩家】【装备购买简化,购买不需要回城,推荐可买装备,消除选择恐惧症】【取消战争迷雾,简化技能。取消高地水晶,增加回血技,减少回城次数,加快游戏节奏】【提供标记、语音、预设语句等快捷聊天方式,简化沟通成本】改变最明显的,就只是操作方式和游戏时长5.3.2 一个重度手游的游戏时间轻量化《王者荣耀》是一款走精品化和重度化的手游,人均月度使用时长已经来到了329分钟,在手游里仅次于《开心消消乐》。比于其他排名在前列的重度手游,《王者》不会主动给用户添堵。这种从端游时代流传下来的绑架用户时间的模式,是完全不符合智能手机和手游最基本的特点的。记得张小龙好像说过,好的游戏应该是玩完即走的。5.3.4游戏内外的社交功能社交到底是什么,普遍的说法是社交是人类判别自我存在的价值,定位自我认同自我的一个必要之物。《王者荣耀》它更现实,或者说,它是现实社交的延伸,而不是一个新的虚拟世界。它充分的利用微信和QQ这两大社交平台,新玩家进入的时候,它的游戏好友就已经有了几百个,就能看见现实生活中的朋友谁在玩《王者荣耀》,这样的社交影响力对于一个新手来说几乎是具有统治力的,如果这个游戏本身又并不是很难上手,那么这个新手的留存率相比其他游戏,就会变得很高了。5.4 产品功能分析总结:功能来源于需求,所针对的核心需求和它希望达成的目标非常明确,发现目标用户在他们隐藏的需求之下,所需要的具体的功能是什么,然后尽可能的去做好这些功能。一款手游如果每个功能都是为了解决用户需求,真正把用户体验放在第一,就能够保证游戏的品质和口碑了,而接下来要做的,就只是把它推出到市场,让市场来检验。六、产品运营分析统治级的产品出现需要三架马车,分别是产品、运营以及运气6.1产品开始阶段核心用户:想在手机上玩《英雄联盟》的游戏玩家。推广方向:只需要针对《英雄联盟》玩家可能出现的地方,有针对性的推广。措施:邀请明星以及《英雄联盟》的职业选手来做活动,直播玩《王者荣耀》,举办比赛,提供奖金,吸引电竞爱好者;社区内容构建方面,加大资料库、视频中心建设,为手Q、微信双平台游戏中心、游戏微社区等平台提供图文、视频内容,同时搭建英雄资料库并提供定制化专题支持;不断的尝试新型用户外发运营模式,通过一些媒体推广方式,如微信公众号、微博等;设置日常签到礼包和非常多的日常活动和限时活动微信&手Q双平台给予了大数据测试方面的鼎力支持,并且一键邀请微信、QQ上的好友6.2产品成熟阶段往UGC、社交化和电子竞技的方向发展,下一批的主要目标用户瞄准至一般的小白玩家和女性玩家了。加入各种各样的社交功能,战队、恋人、师徒,直到最新的LBS玩法。各种各样的《王者荣耀》赛事、直播和社区也被建立了起来,这些活动的本质目的都是为了扩大用户群体,并且让《王者荣耀》渐渐的成为一个平台,由用户自己在上面产生内容和社交,直到融入用户的日常生活当中。七、竞品分析
2016年度十大热门游戏当中,只有《王者荣耀》一款MOBA类手游
针对的用户不同:四款游戏里面上手难度较高,针对的是MOBA类手游的爱好者。但他们却没有认识到,门槛过高是国内手游的禁忌他们低估了人与人之间的社交对于MOBA类手游的重要性;社交的方式不同:四款游戏当中,没有哪款游戏为社交专门下了功夫,没有争取到社交平台对于他们的支持盈利和游戏模式的不同八、成功原因总结以及缺点建议8.1《王者荣耀》成功原因总结
【发现了MOBA类游戏在手机端的需求,并且游戏本身的品质和平衡性做的非常好,让MOBA类玩家在习惯了《英雄联盟》这类高品质游戏之后还能够对游戏本身的游戏性和平衡性表示认可】
【初期确立了要吸引的目标用户为《英雄联盟》等MOBA端游玩家之后,利用腾讯强大的宣传渠道,以手机版的《英雄联盟》作为宣传卖点,让大部分玩《英雄联盟》的玩家都知道《王者荣耀》的存在,从而吸引到了第一批核心用户】
【不用日常任务绑架玩家的游戏时间,不让土豪玩家大幅度破坏其他玩家的游戏体验,专心提升游戏的质量,培养游戏的口碑,为第二阶段的宣传做好准备】
【在吸引了第一批核心玩家之后,《王者荣耀》推出了非常多的社交功能,以来扩大用户群,能够方便让核心用户带其他的一些普通用户入手】
【为了吸引一般的用户,游戏不断降低上手难度,减少一局游戏的时长等等,去除阻碍新用户入手的最后一块挡板】
【借助于微信、QQ双平台,进一步确认了手游+社交的道路,并且充分利用起了双平台来为自己导流】;
【最后说一个感性点的认识,那就是《王者荣耀》能够让一个以前只敢在女神朋友圈下点赞的小男孩成长为了一个女神天天粘着你要你带她上分的荣耀王者,这样的故事并不多,但好像《王者荣耀》里面天天有】
8.2《王者荣耀》缺点分析总结
(1)服务器差、网络不好、游戏卡:跟整个手游的大环境和技术有关的,没有哪个团队会希望自己的游戏出现这种基础的问题,所以如果真的出现了这些问题,那么原因也只能是团队或者是手游界本身的技术实力存在着瓶颈,但是随时时间的推移和技术的进步,这些问题会好转;(2)小学生太多,经常被队友坑,玩家素质差:本质上是中国人素质的问题,随着一个游戏的越来越受欢迎,它的用户的素质水平就必然越来越接近中国人的平均素质水平,所以这些问题其实并不是《王者荣耀》团队能够解决的,而是需要靠社会和教育的引导,《王者荣耀》能够解决的就只是增加挂机惩罚力度,并且尽量让你和跟你游戏水平一样的玩家匹配在一起,而无法再衡量你的道德水平再把所有道德水平高的匹配在一起;(3)操作太无脑,影响技术水平的发挥,游戏画质没有大作那么精细。这些问题其实本质上是由于《王者荣耀》的目标用户定位而带来的问题,它的目标用户是小白用户和女性用户,而且目标人群是极大的,那么根据这些目标用户的操作水平和手机硬件水平,就必然无法设计出非常精密的操作要求和非常精美的画面表现,《王者荣耀》不是不可以设计出来,而是他们选择性的放弃了一部分的操作和画面,因为他们要为他们的目标用户考虑。(4)游戏平衡性不好,有些英雄过于强势:我相信这个问题是最容易、也是最基本的能够随版本更新而解决的问题,根据团队的测试和用户的反馈,对下一版本的英雄属性做相应的处理,是目前版本游戏最基本的做法。总结:发现《王者荣耀》的缺点容易,但是站在他们的角度分析思考问题并且给出行之有效的建议,却非常困难,如果一定要提出一个建议的话,那就是他们在社交化的道路当中,对于大数据能发挥的作用和数据挖掘的优势理解的还不够的深入,在陌生人社交领域,腾讯却还并没有一个非常成功的模式王者荣耀中,有哪些「好的意识」?如何培养? - 知乎12043被浏览4322284分享邀请回答3.8K418 条评论分享收藏感谢收起8.7K1286 条评论分享收藏感谢收起查看更多回答12 个回答被折叠()【业界】 《王者荣耀》技术总监复盘回炉历程 - 知乎专栏
{"debug":false,"apiRoot":"","paySDK":"/api/js","wechatConfigAPI":"/api/wechat/jssdkconfig","name":"production","instance":"column","tokens":{"X-XSRF-TOKEN":null,"X-UDID":null,"Authorization":"oauth c3cef7c66aa9e6a1e3160e20"}}
{"database":{"Post":{"":{"title":"【业界】 《王者荣耀》技术总监复盘回炉历程","author":"voronoi2016","content":"
2015年8月到10月的两个月间,《王者荣耀》从数据不达标摇身一变成了接下来两年国内最大的爆款《王者荣耀》技术总监复盘回炉历程:没跨过这三座大山,就是另一款MOBA霸占市场了
如今已经大获市场成功的《王者荣耀》一直是业内各方关注的对象,而我们也知道这款产品在成为国民级游戏之前,也遇到过一段鲜有人知的调优期。也就是在号正式不删档测试版本推出之后,被腾讯评级为不达六星之后的时间。
据了解,在8月之后的两个月间,《王者荣耀》技术团队对这个产品进行了非常深度的优化,并攻克了局内同步、网络要求,以及性能表现的三大难关,成功达到了腾讯六星产品的标准。比如延迟、卡顿等不同步问题的出现概率从过去的1%,降低到了0.01%,大幅度地改善了游戏体验。
今天在Unity举办的Unite 2017 开发者大会上,《王者荣耀》项目组技术总监邓君针对这款游戏的调优历程进行了复盘,回顾了这款产品在技术层面遇到的三大问题,以及他们的解决方案。
值得一提的是,参会的开发者也非常关注这次的演讲内容,不仅会长当中人员爆满,围住了整个演讲场地,在演讲结束之后,葡萄君也听到一路上诸多开发者对《王者荣耀》技术经验的探讨。以下内容经游戏葡萄整理发布。
大家好,我是《王者荣耀》的邓君,很高兴今天能够有这样一个机会跟在座的同行一起聊聊技术,互相交流,也感谢Unity提供这样的机会,可以由一个互动。这次的主题主要是讲一下《王者荣耀》从立项之初经历的惨淡时期到华丽的翻盘,包括碰到技术方面的问题,以及游戏方向上的改变。我是技术出身的,整个课题也是技术面的,会重点介绍王者荣耀和现在见到大部分不同的技术方案,它实际原理、问题和优化的思路。
先简单自我介绍一下,我是2004年加入腾讯,在腾讯做了4年多的应用层面开发,还包括web各种各样后台都做过,经历比较丰富。在2009年我回到成都,刚好成都的岗位也就只有游戏部门是比较合适的,就转行做游戏了。在成都这边,参与过《QQ封神记》的开发,之后又开发了《霸三国OL》这款游戏,这款游戏开发了三年多,我经历了它从1.0、2.0,再到3.0的版本迭代,这之后才转型做手游,直接做的《王者荣耀》。
现在了解《王者荣耀》或者在玩的人确实比较多,但是我们曾经也没有想过它有这样的结果。当时端游很久都没有做出来成绩,业绩和收入都面临比较大的问题。年前后,《霸三国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。
我们从端游转手游是在2014年底,但真正开始研发《王者荣耀》是在2015年3月份的时候,这个时候项目的要求是让开发的周期尽量短,尽快把手游做上线。我们原本在《霸三国OL》的开发团队大概有40、50个人,再加上后来加入的人员,形成了100多人的团队,进行了游戏的开发。
在年的时候,手游在PvP的方面都比较弱,大部分是卡牌游戏、单机游戏。我们原本是做的端游,它的生命力包括趣味性也是很足的,所以我们做手游的目标,就是即使游戏里会存在PvE的闯关内容,但我们的核心还是要把PvP做好,让玩家有真正的对抗,让玩家与玩家有交流,能体会到这样的游戏乐趣。
既然选择PvP,那么这款产品就是一个网络游戏,而选择网络游戏的同步机制,就是我们首要考虑的问题。同步机制中最常见的应该是CS状态同步,我们的端游也是这样做的,当然,状态同步也有他的优缺点。
先看一下状态同步的优点。
第一,它的安全性非常高,外挂基本上没有什么能力从中收益。
第二,状态同步对于网络的带宽和抖动包有更强的适应能力,即便出现了200、300的输入延迟再恢复正常,玩家其实也感受不到不太舒服的地方。
第三,在开发游戏过程中,它的断线重连比较快,如果我的游戏崩溃了,客户端重启之后只需要服务器把所有重要对象的状态再同步一次过来,重新再创建出来就可以了。
第四,它的客户端性能优化优势也比较明显,比如优化时可以做裁剪,玩家看不到的角色可以不用创建,不用对它进行运算,节省消耗。
再说一下我认为的缺点。
第一,它的开发效率相对帧同步而言要差一些,很多时候你需要保证服务器与客户端的每一个角色对象的状态之间保持一致,但事实上你很难做到一致。
比如客户端和服务器端更新的频率,对优化的一些裁剪,网络的抖动等等,你要让每一个状态在客户端同步是比较难的,而你要想调试这些东西,来优化它带来的漏洞、不一致的现象,花费的周期也会比较长,想要达到优化好的水平也比较难。
第二,它比较难做出动作类游戏打击感和精确性。比如说你要做一个射击类角色,他的子弹每秒钟要产生几十颗,基于状态同步来做是比较难的,因为系统在很短时间内,会产生很多数据,要通过创建、销毁、位置运算来同步。
第三,它的流量会随着游戏的复杂度,而逐渐增长,比如角色的多少。我们做《王者荣耀》时,希望在3G、4G的网络条件下也能够玩PvP,所以我们希望它对付费流量的消耗能控制在比较合理的水平,不希望打一局游戏就消耗几十兆的数据流量。
而另一种同步策略是帧同步。
这种技术应用的很广泛,最早的《星际争霸》《魔兽争霸3》都采用了帧同步,他们都基于局域网运行,网络的条件非常好,也不需要服务器就能搞定。帧同步的优点有几个:
第一,它的开发效率比较高。如果你开发思路的整体框架是验证可行的,如果你把它的缺点解决了,那么你的开发思路完全就跟写单机一样,你只需要遵从这样的思路,尽量保证性能,程序该怎么写就怎么写。
比如我们以前要在状态同步下面做一个复杂的技能,有很多段位的技能,可能要开发好几天,才能有一个稍微过得去的结果,而在帧同步下面,英雄做多段位技能很可能半天就搞定了。
第二,它能实现更强的打击感,打击感强除了我们说的各种反馈、特效、音效外,还有它的准确性。利用帧同步,游戏里面看到这些挥舞的动作,就能做到在比较准确的时刻产生反馈,以及动作本身的密度也可以做到很高的频率,这在状态同步下是比较难做的。
第三,它的流量消耗是稳定的。大家应该看过《星级争霸》的录像,它只有几百K的大小,这里面只有驱动游戏的输入序列。帧同步只会随着玩家数量的增多,流量才会增长,如果玩家数量固定的话,不管你的游戏有多复杂,你的角色有多少,流量消耗基本上都是稳定的。这点延伸开来还有一个好处,就是可以更方便地实现观战,录像的存储、回放,以及基于录像文件的后续处理。
帧同步也有它的缺点。
第一,最致命的缺点是网络要求比较高,帧同步是锁帧的,如果有网络的抖动,一段时间调用次数不稳定,网络命令的延迟就会挤压,引起卡顿。
第二,它的反外挂能力很弱,帧同步的逻辑都在客户端里面,你可以比较容易的修改它。但为什么《王者荣耀》敢用帧同步,一方面是因为当时立项的时候开发周期很短,半年时间要做上线,要有几十个英雄,存在时间的压力,另一方面,MOBA类游戏不像数值成长类的游戏,它的玩法是基于单局的,单局的作弊修改,顶多影响这一局的胜负,不会存档,不会出现刷多少钱刷多少好的装备的问题,而且作弊之后我们也很容易监测到,并给予应有的惩罚,所以我们认为这不是致命的缺点。
第三,它的断线重回时间很长,相信台下也有很多王者玩家,也曾碰到过闪退以后重回加载非常长的情况,甚至加载完以后游戏也快结束了,这是帧同步比较致命的问题。
第四,它的逻辑性能优化有很大的压力。大家应该没有见到哪一款大型游戏是用帧同步来做的,因为这些游戏的每一个逻辑对象都是需要在客户端进行运算的。如果你做一个主城,主城里面有上千人,上千人虽然玩家看不到它,但游戏仍然需要对他们进行有效的逻辑运算,所以帧同步无法做非常多的对象都需要更新的游戏场景。
那么我们为什么选择了帧同步而放弃了状态同步呢?
我们前面提到它两个优点缺点是相对的,这边的优点对于那边来说就是缺点。对于我们手游立项的时候,最重要就是时间。当时市面上正在开发的MOBA手游不止王者一款,大家都在争上线的时间,所以我们要选择一个开发周期最短的方案。
然后我们做端游的时候也有一个深刻的体会,如果要做有趣的英雄,有趣的技能,它在状态同步上面很难调出一个比较满意的效果。所以最后我们依然选择帧同步的方案。
现在来看,选择帧同步方案之后,我们再把它的缺点进行优化或是规避,之后它带来的好处是非常明显的。《王者荣耀》重除了英雄的设计以及技能的感觉,还有很重要的一点,就是它确实在做一些非常有特色的英雄,它的技能、反馈、体验上面都做得不错,这些都是基于帧同步技术方案带来的优势。
我们选择了方案之后,当时觉得很high,觉得这样一个技术方案开发起来得心应手,效率如此之高,做出来的效果也很好。
但事实上,它也有好的一面,也有坏的一面,技术测试版本上线后质量不好,其中技术层面遇到的问题就是下面这三座大山。
第一是同步性,同步性这块容易解决,其实也解决了;
第二也是最大一块网络问题,帧同步它的网络问题导致我们对它技术方案的原理没有吃透,碰到了一些问题,那时候游戏的延迟很重,画面卡顿,能明显感觉走路抖动的现象;
第三是性能问题,这个问题始终存在,我们也一直在优化。
第一座大山,最容易解决的同步问题。
帧同步的技术原理相当简单,10、20年前在应用这种技术了,从一个相同初始的状态开始,获得一个相同的输入,往下一帧一帧执行,执行时所有代码的流程走得都是一样的,这个结果调用完了以后,又有一个新状态,完成循环。相同的状态,相同的流程,不停的这样循环下去。
这个原理虽然简单,但是你要去实现它的时候,还是会有很多坑。
右边写的是实现要点,这是我们在解决第一座大山经验的总结,也是我们实际开发过程当中做的事情。
首先,我们所有的运算都是基于整数,没有浮点数。浮点数是用分子分母表达的。
其次,我们还会用到第三方的组件,帧组件也要需要进行一个比较严格的甄别。我们本身用的公司里面关于时间轴的编辑器里面,最初也是是浮点数,我们都是进行重写改造的。
再次,很多人初次接触帧同步里面的问题,就是在写逻辑的时候和本地进行了关联、和“我”相关,这样就导致不同客户端走到了不同的分支。实际上,真正客户端跟逻辑的话,要跟我这样一个概念无关。
接下来还有随机数,这个要严格一致。这是实现的要点,严格按照这上面的规则写代码还是有可能不同步,本身就很难杜绝这样的问题。
最后,真正重要的是开发者要提升自己发现不同步问题的能力,什么时候不同步了,不同步你还要知道不同步在什么点,这是最关键的。你需要通过你的经验和总结提升这样的能力。这个能力还是通过输出来看不同客户端不同输出,找到发生在什么点。
比如在《王者荣耀》里,我们看到不同步的现象应该是这样,有人对着墙跑,你看到的和别人玩的游戏是不一样的,就像进入平行世界。
最开始测试《王者荣耀》的,我们希望不同步率达到1%,就是100局里面有1局出现不同步,我们就算游戏合格,但实际上对于这么大体量游戏来说,这个比率是有问题的,经过我们不停的努力,现在已经控制在万分之几,一万局游戏里面,可能有几局是不同步的。
这个问题不一定是代码原因或者没有遵循这些要点才出现的,有可能是你去修改内存,你去加载资源的时候,本地资源有损害或者缺失,或者是异常。说白了,你没有办法往下执行,大家走了不同分支,这都可能引起最终是不同步的。
如果你不同步概率比较低,到了这种万分之几概率的时候,很难通过测试来去还原,去找到这样不同步的点。
最开始我们游戏出现不同步的时候,就是在周末玩家开黑多的时候,随着你的概率越来越低,基本上你就自己就还原不出这些问题了,只能依靠玩家帮你还原这样的场景,来分析这样的不同步问题。
同步性遵循这样的要点,按照这样的思路来写,加上你不同步定位的能力,有了监控手段能够去发现,这个问题其实就解决了。解决之后,你就可以好好享受帧同步的开发优势。
第二座大山就是网络,《王者荣耀》技术测试版本出台的时候,延迟非常大,而且还是卡顿,现在看一下帧同步里面比较特别的地方。帧同步有点像在看电影,它传统的帧同步需要有buffer,每个玩家输入会转发给所有客户端,互相会有编号,按顺序输入帧。
比如我现在已经收到第N帧,只有当我收到第N+1帧的时候,第N这一帧我才可以执行。服务器会按照一定的频率,不同的给大家同步帧编号,包括这一帧的输入带给客户端,如果带一帧给你的数据你拿到之后就执行,下一帧数据没来就不能执行,它的结果就是卡顿。
网络绝对理想的情况下还好,但现实的网络环境不是这样的。帧同步要解决问题就是调试buffer,以前有动态的buffer,它有1到n这样的缓冲区,根据网络抖动的情况,收入然后放到队列里面。
这个buffer的大小,会影响到延迟和卡顿。如果你的buffer越小,你的延迟就越低,你拿到以后你不需要缓冲等待,马上就可以执行。但是如果下一帧没来,buffer很小,你就不能执行,最终导致的结果你的延迟还好,但是卡顿很明显。
如果调到帧同步的buffer,假如我们认为网络延迟是1秒,你抖动调到1秒,那得到的结果虽然你画面不抖动了,但是你的延迟极其高。如果连最坏的网络情况都考虑进去,buffer足够大,那么记过就跟看视频是一样的,平行的东西,看你调大条小。一些局部的措施我们都做过,都是一样的问题。
具体我们怎么优化卡顿的问题呢?
刚才提到该帧同步与buffer,这个buffer可以是1也可以到n,我们要解决我们的延迟问题,我们就让buffer足够小。事实上《王者荣耀》最后做到的buffer是零,它不需要buffer,服务器给了我n,马上知道是n,我收到n,我知道下一次肯定是n+1,所以我收到n之后马上就把n这一帧的输入执行了。
那么为什么不卡顿了,画面不抖动了?
最后一个关键点,是本地插值平滑加逻辑与表现分离。客户端只负责一些模型、动画、它的位置,它会根据绑定的逻辑对象状态、速度、方向来进行一个插值,这样可以做到我们的逻辑帧率和渲染帧率不一样,但是做了插值平滑和逻辑表现分离,画面不抖了,延迟感也是很好的。
做了这些后,我们还把TCP换成UDP,在手机环境下,弱网的情况下,TCP很难恢复重连,所以最后用了UDP来做。整体来说,在网络好的情况下,它延迟也是很好的,在网络比较差的情况下做插值,也是传统CS的表现。
我们经常见到角色A和B,有些客户端A在左B在右,有些是A在右B在左,帧同步逻辑上面AB之间的距离和坐标都是完全一样,但是画面上看到他们可能会不重合,那就是你把它们分离之后的表现。网络极其好的情况下,它应该是重合的,但是在网络差的情况下,可能会有些偏差。这里面是最重要的一块优化。
第三座大山,是我们对性能的优化。
本身帧同步逻辑上面在优化上面存在一些缺点,所有的角色都需要进行运算。这方面我们也是借助Unity的特性,如果你想追求性能上的极致,有些东西你需要寻求好的方式。
第一点是热点的处理。
我们是不用反射的,它都有GC性能开销,我们的做法里面,会把对象的显示隐藏放在不同的渲染层里面,尽量让整个游戏帧率是平滑的过程。还有我们本身有自己的系统,比如AI,在《王者荣耀》这样的多角色游戏中,你如果想要做出比较好的体验,那么AI就要做得比较复杂。
而要去优化热点,我觉得就只有这三个步骤可以走。
首先,从程序的结构上面能找到更优的,它的优化效果就是最明显的;其次,如果你的结构都是用的最好,就去挖掘局部的算法,调整你代码的一些写法。最后,如果局部的算法都已经调到最优还是没有什么办法,那只有一条路,就是牺牲整个质量,就是分帧降频。
第二点是GC,这块刚才说不用反射,还有装箱和拆箱的行为也是尽量少用。Unity指导过我们的优化,从GC上面的考虑,他们建议每一帧应该在200个字节以内是比较好的状态,其实很难做到,王者也是每一帧在1k左右,很难做到200。
第三点是Drawcall,这些传统的优化手段大家都用的很熟了。
第四点是裁剪,帧同步里面是不能裁剪的,表现里面我看不到的可以降低频率或者不更新它,这在表现里面可以做的。
第五点是3DUI的优化,比如《王者荣耀》的血条、小地图上面叠的元素等等,这些UI都比较丰富,这块我们用了31UI的方式来优化,没有用UGUI里面进行血条方面的处理。
我们也牺牲了一些东西,我们把所有东西都加载了,在游戏过程当中,我们希望不要有任何IO行为,包括输出我们都是要布局的。你处理的决策和复杂度,如果在一帧里面放出100颗子弹,在放100颗子弹的时候一定要掉帧的,一定要在力所能及的时候把这些东西做到极致。
上面提的是我们的第一代,也是在去年5月份以前做的优化方案。5月份以后,我们还做了另外一件事情:GameCore。
首先,为什么我们觉得iOS比安卓的优化效率高一些,一方面是iOS的CPU架构包括系统确实都优化的比较好,另一方面我们用的Unity4.6,在IOS下面它本身效率高一些,在安卓端的机器各种各样,性能也是千差万别,我们只能用性能比较差的方式。
因为我们已经做到逻辑和表现的分离,那么我们能不能把逻辑独立出来,做成一个C++的东西,实际上我们在去年开始已经在这样做了。做之前也测试过C++和Mono性能的差别,大概是2.5左右,本身我们的逻辑占比游戏消耗20%多,逻辑不是一个大头,我们做了这件事情之后,还是有效的,帧率提升了2到3帧,花的时间很长。
其次,做GameCore以后最明显的变化是我们以前逻辑上的GC没有了,我们有自己内存的管理、对象的管理,包括里面所有的容器类这些东西都是我们自己实现的,包括反射整个一套。它有了自己的内存管理,本身的效率就会比较高,这就已经是一个比较明显的优势了。
再次,有了GameCore之后,又多了很多应用场景,这个东西就是玩法的服务器版本,应用场景运行服务器要做很多的分析,还有第三方使用都是可以的。
最后,GameCore还有可以扩展多线程的潜力。
今后,我们也有几个计划。
第一,我们考虑能不能在热更新上面有所突破。因为王者这样一个游戏类型,包括它的体量,我们对于性能有一个比较极致的追求,不会轻易使用脚本层面在性能层面本身就不是最好的。这个我们要去研究的就是热更新,性能最好的方式。
第二,我们也在和硬件厂商沟通,他们希望游戏能够真正发挥多核性能上的优势,大部分的游戏在单核上面,把一个核吃的满满的,很多时候我们现在得出的结论,GPU性能也很强,王者并没有对GPU占满,可能只用了30%,CPU反而吃的比较满,吃满以后它还有另外一个坏处,它的发热、降频,你如果用多线程、多核去尽量平坦,让它不要处于高频的工作方式,反而会有更好的效果。
第三,我们现在用的是Unity 4.6版本,但Unity已经进化到5.7版了,后面他们还会推出新的特性,我们希望结合一些Unity新特性,现在已经有些游戏用5.6可以提升性能。
最后,不光是提升性能问题,Unity在多线程的渲染,也有很好的作用,使用引擎优势也是很必要的。随着性能的提升,我们会对王者的画质进行升级。
好的,我今天的演讲就到此结束了。","updated":"T10:24:35.000Z","canComment":false,"commentPermission":"anyone","commentCount":5,"collapsedCount":0,"likeCount":32,"state":"published","isLiked":false,"slug":"","lastestTipjarors":[],"isTitleImageFullScreen":true,"rating":"none","titleImage":"/v2-6d829fdcb0a70a25b11d991_r.jpg","links":{"comments":"/api/posts//comments"},"reviewers":[],"topics":[{"url":"/topic/","id":"","name":"虚幻引擎"}],"adminClosedComment":false,"titleImageSize":{"width":1920,"height":650},"href":"/api/posts/","excerptTitle":"","column":{"slug":"tomotech-mobahero","name":"【UE4】【MOBA制作日记】"},"tipjarState":"activated","tipjarTagLine":"真诚赞赏,手留余香","sourceUrl":"","pageCommentsCount":5,"tipjarorCount":0,"annotationAction":[],"hasPublishingDraft":false,"snapshotUrl":"","publishedTime":"T18:24:35+08:00","url":"/p/","lastestLikers":[{"bio":null,"isFollowing":false,"hash":"91b545cb1ca54bb46cd072","uid":04,"isOrg":false,"slug":"zhou-qun-chuang","isFollowed":false,"description":"不要关注我,懒得拉黑","name":"好奇","profileUrl":"/people/zhou-qun-chuang","avatar":{"id":"dcf154cf40ac99f7a9851c","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"每一秒都在变老","isFollowing":false,"hash":"fda36b0c1be4eefcda749e723f1117a1","uid":40,"isOrg":false,"slug":"zhan-long-37","isFollowed":false,"description":"程序员","name":"战龙","profileUrl":"/people/zhan-long-37","avatar":{"id":"4fae7e1afa","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"计算机专业萌xin","isFollowing":false,"hash":"37e6b2d1cd4a128dd3aa05d4dc85d21d","uid":002700,"isOrg":false,"slug":"mba-10","isFollowed":false,"description":"","name":"mba","profileUrl":"/people/mba-10","avatar":{"id":"v2-3e9a5fb9a2c388f4f827faa45238dd1b","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"西南大学经济管理学院毕业。","isFollowing":false,"hash":"7731af5ddb3bbc8baeada","uid":60,"isOrg":false,"slug":"chen-tao-51","isFollowed":false,"description":"","name":"陈滔","profileUrl":"/people/chen-tao-51","avatar":{"id":"3aa221eec","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"房产经纪人,金融服务","isFollowing":false,"hash":"9dba526efa499b27baea","uid":319600,"isOrg":false,"slug":"dai-xiang-1-96","isFollowed":false,"description":"","name":"戴向","profileUrl":"/people/dai-xiang-1-96","avatar":{"id":"da8e974dc","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false}],"summary":" 2015年8月到10月的两个月间,《王者荣耀》从数据不达标摇身一变成了接下来两年国内最大的爆款《王者荣耀》技术总监复盘回炉历程:没跨过这三座大山,就是另一款MOBA霸占市场了 如今已经大获市场成功的《王者荣耀》一直是业内各方关注的对象,而我们也知道…","reviewingCommentsCount":0,"meta":{"previous":{"isTitleImageFullScreen":false,"rating":"none","titleImage":"","links":{"comments":"/api/posts//comments"},"topics":[{"url":"/topic/","id":"","name":"虚幻引擎"}],"adminClosedComment":false,"href":"/api/posts/","excerptTitle":"","author":{"bio":"汽车架构解析,MOBA制作,前韩国JYP练习生","isFollowing":false,"hash":"e7eab0c5f3a2e","uid":76,"isOrg":false,"slug":"voronoi2016","isFollowed":false,"description":"http://blog.csdn.net/nanhu2012?viewmode=contents","name":"Voron","profileUrl":"/people/voronoi2016","avatar":{"id":"v2-5f72b5fcd250bbb7f4a60","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},"content":"(版权声明,禁止转载)实现了FSocket的连网基础功能,这一讲实现一下 断线重连&如果资深前辈发现有理解错误,还请不吝指正&&1& 创建Socket,设置阻塞模式(默认创建出来的就是阻塞模式,不用设置)void ANetwork::BeginPlay()\n{\n\tSuper::BeginPlay();\n\n\tSocket = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)-&CreateSocket(NAME_Stream, TEXT(\"default\"), false);\n//\tSocket-&SetNonBlocking();\n//...\n}\n&2&对网络地址成员变量的存储方式做个调整,从指针改为TSharedPtr,这样保证只需创建一次class ANetwork\n{\n//\n...\nstatic TSharedPtr&class FInternetAddr& InetA\n//...\n};\n\nvoid ANetwork::BeginPlay()\n{\n//...\n\tFString address = TEXT(\"119.23.171.163\");\n\tint32 port = 8888;\n\tFIPv4A\n\tFIPv4Address::Parse(address, ip);\n\n\tTSharedRef&FInternetAddr& addr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)-&CreateInternetAddr();\n\taddr-&SetIp(ip.Value);\n\taddr-&SetPort(port);\n\n\tInetAddr =\n}\n&3&Connect成功之后,设置为非阻塞模式bool ANetwork::Connect()\n{\n\tif (Socket && !Connected)\n\t{\n\t\tConnected = Socket-&Connect(*InetAddr);\n\n\t\tif(Connected)\n\t\t\tSocket-&SetNonBlocking();\n\t\telse\n\t\t{\n\t\t\tFPlatformProcess::Sleep(1);\n\t\t}\n\t}\n\n\treturn Connected;\n}\n&4&Recv检测到连接断开,重新创建Socket,非阻塞的时候底层的recv要做一些判断连接是否断开,这些判断UE4已经实现了void ANetwork::Recv()\n{\n\tif(Socket)\n\t\tConnected = Socket-&Recv(ptr, 2, BytesRead);\n\tif (!Connected)\n\t{\n\t\tSocket-&Close();\n\n\t\tISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)-&DestroySocket(Socket);\n\t\tSocket = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)-&CreateSocket(NAME_Stream, TEXT(\"default\"), false);\n//\t\tSocket-&SetNonBlocking();\n\t}\n}\n&5& 如果断开,EventLoop循环Connectvoid ANetwork::EventLoop(void* data)\n{\n\twhile (1)\n\t{\n\n\t\tif (!Socket || bGameOver)\n\t\t{ \n\t\t\tClose();\n\t\t\tbreak;\n\t\t}\n\n\t\tif (!Connected)\n\t\t\tConnect();\n\n\t\tif (Connected)\n\t\t\tRecv();\n\n\t\tFPlatformProcess::Sleep(0.03);\n\n\t}\n}\n","state":"published","sourceUrl":"","pageCommentsCount":0,"canComment":false,"snapshotUrl":"","slug":,"publishedTime":"T16:31:27+08:00","url":"/p/","title":"【UE4】第13讲【MOBA制作日记】FSocket断线重连","summary":"(版权声明,禁止转载)实现了FSocket的连网基础功能,这一讲实现一下 断线重连&如果资深前辈发现有理解错误,还请不吝指正&&1& 创建Socket,设置阻塞模式(默认创建出来的就是阻塞模式,不用设置)void ANetwork::BeginPlay()\n{\n\tSuper::BeginPl…","reviewingCommentsCount":0,"meta":{"previous":null,"next":null},"commentPermission":"anyone","commentsCount":0,"likesCount":2},"next":null},"annotationDetail":null,"commentsCount":5,"likesCount":32,"FULLINFO":true}},"User":{"voronoi2016":{"isFollowed":false,"name":"Voron","headline":"http://blog.csdn.net/nanhu2012?viewmode=contents","avatarUrl":"/v2-5f72b5fcd250bbb7f4a60_s.jpg","isFollowing":false,"type":"people","slug":"voronoi2016","bio":"汽车架构解析,MOBA制作,前韩国JYP练习生","hash":"e7eab0c5f3a2e","uid":76,"isOrg":false,"description":"http://blog.csdn.net/nanhu2012?viewmode=contents","profileUrl":"/people/voronoi2016","avatar":{"id":"v2-5f72b5fcd250bbb7f4a60","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false,"badge":{"identity":null,"bestAnswerer":null}}},"Comment":{},"favlists":{}},"me":{},"global":{},"columns":{"tomotech-mobahero":{"following":false,"canManage":false,"href":"/api/columns/tomotech-mobahero","name":"【UE4】【MOBA制作日记】","creator":{"slug":"voronoi2016"},"url":"/tomotech-mobahero","slug":"tomotech-mobahero","avatar":{"id":"v2-a28cfdb82d2f875b8f551","template":"/{id}_{size}.jpg"}}},"columnPosts":{},"columnSettings":{"colomnAuthor":[],"uploadAvatarDetails":"","contributeRequests":[],"contributeRequestsTotalCount":0,"inviteAuthor":""},"postComments":{},"postReviewComments":{"comments":[],"newComments":[],"hasMore":true},"favlistsByUser":{},"favlistRelations":{},"promotions":{},"switches":{"couldAddVideo":false},"draft":{"titleImage":"","titleImageSize":{},"isTitleImageFullScreen":false,"canTitleImageFullScreen":false,"title":"","titleImageUploading":false,"error":"","content":"","draftLoading":false,"globalLoading":false,"pendingVideo":{"resource":null,"error":null}},"drafts":{"draftsList":[],"next":{}},"config":{"userNotBindPhoneTipString":{}},"recommendPosts":{"articleRecommendations":[],"columnRecommendations":[]},"env":{"isAppView":false,"appViewConfig":{"content_padding_top":128,"content_padding_bottom":56,"content_padding_left":16,"content_padding_right":16,"title_font_size":22,"body_font_size":16,"is_dark_theme":false,"can_auto_load_image":true,"app_info":"OS=iOS"},"isApp":false},"sys":{}}

我要回帖

更多关于 怎么才是荣耀王者 的文章

 

随机推荐