Crash率10%降至1%,腾讯专家是如许打磨佳构游戏的

来自 腾讯GWB游戏无界>2019-05-18
资讯

[ 转载自 腾讯GWB游戏无界 ]

Crash率10%降至1%,腾讯专家是如许打磨佳构游戏的

跟着开拓对象的赓续迭代和开拓职员能力的赓续晋升,制作一款游戏也不再是一个难事。每个开拓团队不管规模大小,都在极力让自己的产品尽善尽美。但有时候可能因为经验不敷、光阴紧迫等原因,还是会碰到一些自己无法解决的艰难。这时候他咱咱们其实很必要获得一些行业专家的指点和帮助,而腾讯游戏学院恰好就供给了如许的资源。

腾讯署理的一款暗黑类ARPG手游《拉结尔》行将上线,这款游戏由腾讯游戏学院专家停止了历时4个多月的打磨指点,从线上相同到现场阐发,重点解决了一些客户端的成就。下面就为大家总结一下项目组碰到的成就和专家董根的解决计划,相信会给有类似困惑的开拓者咱咱们一些帮助。

晋升游戏流畅度,低落场景内存占用

拉结尔的开拓团队和专家之间先是颠末过程邮件停止了开端的相同,针对开拓团队提出的机能成就,给出了一些针对性的建议。研发团队提出了如下几个成就:

1.?项目中应用的PSS比模范模║WA),超过1G;游戏启动400+MB,进入到游戏景1+G了;在Xcode看到在登录实现后内存高达660+MB,此中数据表(MONO)的200+MB,其余未知模块消耗400+MB,请问这部分的内存能低落么?怎么低落?

专家解答:MONO内存包含的不只是数据表,如果是全体MONO内存比较高,建议可以或许或许颠末过程Unity官方开源的Memory Profiler进一步阐发,如果确认是数据表的部分,可以或许或许看看是否表格设计的列过量,能不能精简一下,或许在加载的时候用更精简的布局转存一下,能手动定义的字段不要颠末过程Key-Value访问。表格中的字符串同一读到字符串表中,原先记载中的字符串用id来代替,如许可以或许或许削减重复字符串。这些是常用的手腕,但建议项目组结合实际的阐发结论确定优化办法。

2.?Unity3d 5.6.4自带的Cloth组件,无规律的出现闪退,Cloth布料的制作和应用是否是有一些规矩,能让cloth运行更稳固??另外Cloth组件中的SleepThreahold是间隔光阴停顿么?怎么应用?能对Cloth组件的机能消耗能低落么?

以后项目应用Cloth组件,发如今导入fbx的时候勾选了Optimize Mesh选项,Cloth组件同级以氐腟kinnedMeshRenderer的Bounds很大概率(70&~80%)出现NaN;不勾选Optimize Mesh后,NaN错误没有再出现了;请问这个NaN是否会对布料的计算发生机能消耗?

专家解答:SleepThreahold是指布料顶点的移动速率在多小的时候就进入asleep状况不再更新。Bound变成NaN这个有可能是一个Unity的Bug,这个重要会影响Unity做视椎裁剪,带来视觉错误或许额外的机能开销,同时对其余依赖Bound的逻辑也会有影响。

按如今的移动设备跑布料体系压力非常大,效果上要有包管的话机能开销非常高,压低参数又比较容易出现模拟穿帮,另外Unity的布料也是集成的NvCloth,这个布料库在移动端的稳固性确切不好,所以手机上还是建议不要应用布料。通常环境下用Dynamic Bone等插件也能做到不错的效果。

3.?(Android平台下)音频加载和播放都邑出现较为现目ǘ(CPU耗时300毫秒以上),怎么均衡效果和效力?(目前没有停止太多音频的平台设置,间接拿起就播放的)

专家解答:如果是长光阴的配景音乐,建议在资源上打开Streaming,短光阴(1、2秒以内)的音效如果都很卡的话,重要就要靠压低采样率了,或许尝试采纳不压缩的格式

4.?以后项目应用了T4M的地表插件,美术应用了4层,导落秩竞氖比较严重(4ms);就以后项目而言如何兼顾美术的必要又低落消耗?

专家解答:地表的多层混合建议在渲染自己上做优化,一方面是削减贴图,在可接受的规模内尽量削减贴图的尺寸,如果可以或许或许的话去掉一些层的法线贴图。另外一方面可以或许或许重写一下地形的Shader,用最简略的光照模子,削减不必要的贴图采样。地形的顶点数也留意一下,不要太夸张就好。如果能对多层的权重做一些限制(例如单个地位同时仅允许2层权重有用),则有更多的办法。

5.?烟雾的特效(已经用了序列帧),但是overdraw还是很高;如何低落overdraw?

专家解答:如许的成就还是要从美术方面入手,尽量低落半透明面片的大小和数目,防止应用充斥全屏或接近全屏的烟雾,可以或许或许供给一下详细overdraw比较高的画面看看

6.?目前场景物件比较多,全体都是Static。然后烘焙后Lightmap可能会构成batch断掉,构成drawcall很高。对付这种场景物件很多的环境,有没有什么好的做法或建议?

专家解答:最间接的办法便是在可接受的规模内尽量低落LightMap精度,使烘培进去的LightMap尽可伲越少就越不容易打断batch,最优的状况是只要一张,那么就不存在打断batch的成就了。

还可以或许或许对场景停止切块,把每个块单独放在一个临时场景中,内容包管在一张Lightmap的容量内,然后单独烘培这个场景,末了把烘培结果取出,运行时手动给设置上。如许可以或许或许包管单块之内不会因为LightMap而打断batch。

解决资源丢失,显示异常成就

为顺应手游疾速更新的节奏和便利节制战斗场景内存,由Resources办法调剂成AB包的办法,针对调剂过程中的一些坑点,专家也耐心供给解答。

研发团队提出了如下几个成就:

1、?目前存在很多shader丢失成就该如何解决?

专家解答:是否将Shader打了依赖包?或许代码中有静态切换Shader宏的操纵?如果有,建议在Shader的包中带上一组空材质,将可能的变体组合都在材质上设置一下,因为Shader打包因为没有材质引用,所以无法辨认统统的变体。研发解决后也反馈了解决办法:shader的丢失是U3D的着色器剥离,已设置成手动的,一些应用shader.find的办法都替换成读取AB中的办法了。

2、?对付资源下载的大小,因为资源是零散的,然后互相之间有依赖相干;可能会分派到分歧的chunk中,导致,每下一个都要多带上之前的资源;目前我采纳的是,把chunk块分的大小从32扩大到128块,如果设置到128块,会不会机能相干成就,读取上会不会卡顿,依赖相干是否会增长?

专家解答:再多分细一些完全没有成就,以后热更新粒度也会更细。

3、?在ui上的角色怪物显示在安卓平台上出现了成就,表示为rt的透明度全体为1,导致角色相机在没有渲染的地方也显示了camera的clear color。成就出于一个bloom的后处理,全体脚本取消了就没成就,但咱咱咱们把OnRenderImage换成只要一行blit(src,dest)以后成就还是存在。

专家解答:偏向RT和源RT相同的时候,Untiy会创建一张临时RT作为偏向RT,末了再将它拷贝回来,拷贝的过程颠末过程截帧看到在部分平台下写入A通道被关闭,虽然临时不清楚Unity内部的机制,但是颠末过程CommandBuffer从新实现的话,可以或许手动节制后期流程中的每个关键,规避掉这个成就。

Crash率优化—从10%降至1%

从19年三月份开端,腾讯专家也利用周末光阴间接出差到开拓团队地点地,现场协助阐发和解决成就。

初次线下相同的过程中,在没有log只要底层堆栈的环境下,腾讯专家针对崩溃环境给出一定的阐发。在内存分派失败的时候,要先确认一下其时的内存加环境,有几种可能:一是确切内存环,二是内存碎片太多导致找不到连续空间,三是资源上有成就导致传了一个未初始化的值作为size去分派内存。如果是末了一种环境可以或许或许把资源加载的记载打印一下,看看是否和特定资源的加载无关联,如果是前两种环境就比下榉沉,只要持续优化内存了。

第二次线下相同专家颠末过程现场阐发崩溃规律和日志,建议增长更多定位日志,查阅代码,发现unsfae指针,存在越界危险,可能带来闪退成就,而且排除闪退是因为接入sdk的可能性。

末了专家也针对特别字体/字符,提出调用体系字体的办法,以削减闪退的成就。与此同时,专家还和研发主程交换了开拓流程和尺度等成就,分享了一些小我的经验,有用晋升了开拓效力。至此《拉结尔》项目一系列的成就都获得有用解决。

文章评论
葡萄谷游戏网订阅号
友情链接:新疆人才招聘网  广州美容在线学习网  中国智能建筑网  古代师徒甜宠小说网  上海网游资讯  mc喊麦网  泉州环保新闻网  比思論壇_www.bipics.net-港台綜合性美文吧  丰汇资讯新闻网  新能源汽车价格表网