有可能是国内最好用的unity性能分析工具

发表于2015-09-25
评论0 8.5k浏览

有可能是国内最好用的unity性能分析工具

 

 

据说90%的高颜值工程师都在等待“她”的出现。反正也没人约你,不如主动出击、来试试我们这个产品?2015年11月11日之前,我们祝你脱单。

首先感谢你的到来,这的确一个是业内非常期待的工具类产品,无论你是否正在从事unity相关的工作,我们讲完这个良心产品的故事保证会让你增加58%的魅力值。

言归正传,这一次、我们仍然朝着解放你右手的方向前行,但在此之前,先要看看你的”能到底行不行?


下文有大量专业术语,有可能引起您的不适,请在家长指导下阅读。


一.常见的unity手游性能问题有哪些?

unity手游的性能问题一直是被视为诟病,公司TDR评审中已经见过很多,先列出几个口头上说的比较多的问题:

         64位unity游戏内存过高,撑不了几局就爆了;(所以说持久才是关键)

         CPU过高造成卡顿

         Drawcall太多、导致卡顿;

         mono内存泄漏;


上面几个是常见的问题本质, 那它们对游戏的具体影响是什么呢?就拿最近比较火的《全民超神》来举例,我们有幸参与了它上线前后的几个优化版本的分析,先后遇到的负面影响和优化方法主要有下面几个:


         同步导致的卡顿,用CS同步来替代,并且进行数据包的合并与优化;

         频繁创建和销毁的小兵对象让CPU开销很大,采用高效对象池进行优化;

         在玩家视野外的不必要的特效和渲染可以全部关闭,降低了CPU和GPU开销;

         在高中低三档机型上玩游戏时,分别加载不同层次的特效包,这也有助于降低cpu和内存的开销;

         发现副本内wwise音频组件占了30%的cpu时间,果断抛弃之,采用unity自带功能,优化很明显;

         副本内每帧200以上的Drawcall导致中低端机型有明显卡顿,最终抛弃了NGUI,重写了一套紧密结合自身特性的GUI,搞定!

 

上面问题全部解决掉后,如果内存还是偏高怎么办?请看下面这张图,我们能继续帮你细分出各种资源的内存占用量。

我们协助全民超神先后做过五5v5玩法的性能分析,拿最早的版本到稳定版本来对比的话,Native重复资源对象从43M减少为20M,优化了53%关卡切换保留的资源从7.8M减少为约4M,优化49%;副本进入后大约15秒左右,因为大量GC导致的FPS过低问题也已经搞定

 

二.Unity cube 能干什么?

一句话概而言之:让用户以最小的成本在真机上进行游戏性能深度分析

是不是经常有一个疑问在闹边盘旋,不用工具行不行?当然行,并且你的产品照样能发布、能上线,但生病后怎么办,还得老老实实的去看病去吃药;冰冻三尺非一日之寒, 一场大病的费用远比日常保养要贵的多,对应的测试名言就是“bug发现的越早、修复成本越小”。

常见的游戏质量改进的过程如下图,我们能帮你完成的是前两个环节,至于第三步、解决问题当然还是要开发人员去改代码了。

 

打个广告、让你没有丝丝防备。。

 

三.Unity cube 功能介绍

目前市面上大多数性能工具都还停留在操作系统级别的数据上, 在游戏自身的分析上似乎还缺少点什么,所以我们觉得还可以往灵魂深处挖一挖 -- 基于引擎做点什么。

  1. 功能介绍

通过Unity Cube的APP启动游戏,正常退出游戏后再上传结果,然后到cube的主页上查看刚才游戏的数据分析结果。APP在游戏过程中进行多种数据的提取,包括cpu、内存、drawcall、mesh、AnimationClipAudioClip、texture2D、堆栈、函数时间、对象生命周期 等。(不断增加中)

在资源分析纬度上,我们能给出如下结论:

             资源使用是否在合理范围之内。

             一个场景内的资源重复率。

             资源对象拷贝的数量是否合理。

             场景切换时保留的资源详情

 

在性能分析纬度上,我们能根据高中低三档机型自动的给出不同参考值:

             场景内FPS变化趋势。

             场景内CPU变化趋势。

             CPU和FPS在性能低谷时的函数开销排名。(逻辑函数和GC)

             mono内存的分配趋势。

             每帧的drawcall 次数。

 

作为科普性软文,还是有必要对以上数据进行简单解释一下。

         我们能在一次测试过程中,看看各项资源使用是否在合理范围之内。例如某个射击游戏在纹理(texture)内存的占用较高,峰值达到了88.5MB,这时我们就需要建议研发团队来进行纹理部分的优化。

         在FPS或CPU 低谷的时间点,我们对分析了较高CPU占用的函数排名,开发团队能够根据这些信息快速定位到相关模块,有的放矢的改进和优化。

         游戏运行过程中(特别是战斗场景内),垃圾回收(Garbage Collection)的调用次数和执行时间,很大程度会影响游戏运行的流畅度(卡顿),根据数据信息能帮助开发团队更好的去优化代码。

         在场景切换时被长期保留下来的资源中,有一部分是因为没有及时被释放而被保留了下来,占用了多余了内存;我们列出了这部分冗余资源,让开发人员清楚的看到哪些资源是没有被及时释放的。

 

  1. 同类工具对比。

MAT (Memory  Analyzer Tool)的缺点

需要导入HPROF文件再分析;

只能查看java层的内存情况,看不到native堆的详情;

 

xcode instrument 的缺点

只能用于mac,ios

只能查看C++ 或 object C 的情况,看不到mono堆的详情;

 

Unity Profiler 的缺点

需要单独编译develop版本;

在PC上执行,没法捕获真机数据;

内存数据跟实际真机的数据差异很大、多的时候有几十M差距;

只能看到最近一段时间的数据,看不到总体的详情;

 

自己的缺点当然也是一个不可回避的问题,目前我们在开发计划中功能还包括:渲染三角形数量、渲染texture数量、对象引用关系等,在重度性能分析过程中对FPS略有影响,因为我们会提取每一帧的函数堆栈信息,数据量比较大。

 

  1. 逻辑架构图

 

这里也不多说什么了,一张简单的架构图而已,满足下技术控的偷窥欲望。。

 

  1. 什么?你不熟悉unity?

没关系,这个已在我们的预料之中,我们为你准备了不同的结果展示页面。

 

对于unity比较陌生的用户,你只需要看总结概述页面即可,页面上会列出所有问题的总结。

对于unity大神和开发人员,你更关心的应该是详细的性能数据,都能满足你们。大神说“我更喜欢看着unity profiler直接调试啊”,那你还得腾出时间编译一个develop版本、还得重新跑一遍游戏、数据和真机还相差很多,关键是大神哪来那么时间。。

 

  1. 提高工作效率

答案是肯定的,工具本身就是为提高生产效率而存在。

我们常见的质量改进流程有下面这四步:

1)      性能测试时发现问题;

2)      提bug 给开发人员;

3)      开发人员编译develop版本;

4)      开发人员用unity profiler 定位原因;


用unity cube进行游戏测试能帮你省掉后面2个步骤,何乐而不为呢?

通常情况下、开发人员是间隔几个星期甚至几个月才会去做一次性能调优的工作,中间已经隔了N版本,有很多问题会被埋的很深;基于“问题发现的越早修复成本越小”的硬道理,功能测试人员完全可以用unity cube进行日常工作,让它在身后默默为你发现问题。

 

四.优化native heapN种方法

作为一个以性能优化为己任的工具类产品,我们不仅致力于问题的发现和定位,性能优化的若干方法也是我们日常唠嗑的内容之一。

贴图

         控制贴图大小,尽量不要超过 1024 x 1024;

         尽量使用2的n次大小的贴图,否则GfxDriver里会有2份贴图;

         尽量使用压缩格式减小贴图大小;

         若干种贴图合并技术;

         去除多余的alpha通道;

模型

         尽量控制模型的面数;(废话…)

动画

         N种动画压缩方法;

         尽量减少骨骼数量;

声音

         采用压缩MP3 和 wav;

资源方面的优化

         使用 Resource.Load 方法在需要的时候再读取资源;

         各种资源在使用完成后,尽快用Resource.UnloadAssetUnloadUnusedAsset卸载掉;

         灵活运用AssetBundle的Load和Unload方法动态加载资源,避免主要场景内的初始化内存占用过高;(实现起来真的很难…)

         采用www加载了AssetBundle后,要用www.Dispose 及时释放;

         在关卡内谨慎使用DontDestroyOnLoad,被标注的资源会常驻内存;

 

五.页面截图

 

C:UserschunheDocumentsRTXC File ListAccountschunheRTXDownloadimageCache{E8A84357-0DFA-41C5-914D-97246AA3F28E}.png

 

六.

俗话说:用户体验不谈性能就是耍流氓PC游戏上的性能问题并没有那么明显, 加个内存换个cpu或者刷个主频就能轻松搞定;到了手游时代后情况则显得比较严峻,捉肘见襟的内存让资源加载时就像如履薄冰,加上高中低不同配置的机型更加让性能问题显得很突出,一个低端机型上的卡顿就可能造成一大批屌丝用户的流失这当然无法被忽视。

性能优化就像海绵中的水、又或是内衣里的肉,挤一挤总会有的。同时、性能优化并不是一劳永逸的工作,项目的各个阶段都会有性能上的问题,在用户体验的基础上持续进行打磨,持续保持产品的良好性能才能赢得好口碑。(和保持身体健康是一个道理)

 

Unity游戏的性能优化过程更像是一门时空转换的艺术, 持续在cpu和内存之间取得一个平衡。空间不足时则需要释放一些无用数据,以获得更优的空间使用率;时间太长时就需要降低不必要的函数开销。例如在低端机上,为了节约有限的内存空间,静态加载的资源会相对较少,很大一部分资源通过动态加载和释放;而在高端机上则不用考虑空间的限制,可以一次性静态加载更多的资源,省去了不少loading和GC的工作,让游戏体验更流畅

  

 

 

产品下载:http://pub.code.oa.com/project/home?projectName=UnityCube

产品相关欢迎联系RTX:youngxuesenxu

我们致力于打造一个最完美最好用的unity性能工具 --- The Cube

 

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引