使用UWA GOT优化Unity性能和内存

使用UWA GOT优化Unity性能和内存

作为UWA推出的本地化性能优化工具,UWA GOT已被不少开发团队所熟知并掌握。其旨在帮助大家能在本地快速测试、查看并分析性能数据,而其最大的优势就是一个字:“快”!

今天为大家推荐的这篇文章,是来自一位Unity开发者使用UWA GOT来分析并优化性能的过程。此文章详细记录了其使用UWA GOT三大功能(CPU Overview、Mono Analysis和Asset Tracker)的具体方法,并迅速定位了性能的瓶颈以及接下来的优化方向。

这是侑虎科技第297篇原创文章,感谢作韩宇飞供稿,欢迎转发分享,未经作者授权请勿转载。

原文链接:https://zhuanlan.zhihu.com/p/28345928


使用UWA测试平台作为性能分析的辅助手段已经有很长时间了,每个版本测试一下可以得到一份整理过的报告,比人工分析高效不少。但毕竟网站提交的方式需要等一段时间。这次得知UWA还出了本地化的工具,立马尝试了一下,果然非常给力。

UWA GOT有三种分析方式CPU Overview,Mono Analysis和Assets Tracker,我最喜欢的是Mono Analysis,查找内存泄漏问题时就方便很多。虽然分析上不如XCode全面详细,但已经满足日常的基本需求,一些测试工作也可以交由测试同学完成,离线分析。

UWA GOT的使用方式就不多说了,官方的帮助文档非常详细,这里提供下传送门

以下是性能分析工具的截图:
请输入图片描述

CPU Overview模式可以检测出高耗时的逻辑函数。在下图中,我们可以看到逻辑层的开销比较高,考虑到是帧同步,所有逻辑都在逻辑层,66ms更新一次,开销比较高的模块在角色,技能,网络等。由于在此之前,已经优化过几轮,各个模块的开销都比较平均了,没有明显的瓶颈,进一步的优化需要更细致的深度分析和优化了,属于打磨的过程。
请输入图片描述

Asset Tracker模式可以追踪到各个资源的使用情况,包括具体资源的格式是否合理,是否存在冗余等问题。下图可以看到AI的内存开销比较高。主要是因为AI对一些帧操作做了Clone。
请输入图片描述

下图是日志和录像的系统开销,可以看到其耗时较高。不过录像系统只有Debug在客户端,Release版会记录在服务器,日志系统只有Debug版会记录本地,Release版只会上报不同步的、前后有限帧的数据,并且日志系统也将会改成记录二进制数据。
请输入图片描述

下图是利用Asset Tracker功能发现的冗余MeshCollider,我们项目目前只使用了BoxCollider和基本的射线检测,在此基础上实现了一套简单的物理系统。因此是不应该有MeshCollider的使用,此处初判是误传的资源。
请输入图片描述

特效和场景资源占用较高,还需要美术进一步优化。战斗激烈的时候特效占的内存甚至要比贴图和Mesh加起来还大。
请输入图片描述

特效部分主要是粒子系统,使用次数非常多,产生的内存占用也相当高,超过了贴图的大小。这是因为射击游戏时,每帧会产生大量子弹,更需要小心使用和优化。
请输入图片描述

场景的Mesh资源合并后,内存占用也比较高,因为场景一直无法确定,美术不能做人工静态合并,只能做载入时的静态合并,等场景确定下来可进行人工或借助插件合并。
请输入图片描述

FMOD的参数使用了String,并且调用次数非常高,导致GC较高,可以优化。
请输入图片描述

下图是技能系统底层,我写的计时器使用了delegate,并且次数非常高,从而也导致了GC较高。因为整个游戏中,几乎所有的变现效果都使用这套系统,所以这块是目前最大的瓶颈。
请输入图片描述

作为一个射击游戏,子弹数据非常高,虽然使用了内存池,也做了预加载并制定了一次策略,但是不同技能表现出脚本调用的频率差距很大,个别脚本预加载的个数远远不够。
请输入图片描述

UI的一些合并产生了较高的GC,可以划分动态和静态层,也可以对动态需要隐藏的UI使用移除屏幕等方式减少合并次数。
请输入图片描述

下图为一些粒子系统播放开关产生的开销。
请输入图片描述

跳字GC较高,因为使用了渐变,这部分可以做优化。
请输入图片描述

UWA GOT中的Mono Analysis可以对比两帧的内存快照,从而找到增量的部分。下图是实测图,对比两帧之间,可以发现还有一点创建角色的GC开销,看起来不高,我推测有角色漏了预加载,因为技能可能召唤角色,各种生成器会随机产生道具和怪物等,都有可能漏掉。此外开始帧和结束帧之间内存分配差异较小,说明优化得较好。
请输入图片描述

利用好UWA GOT的这三个功能后,到这里基本上已经能抓出不少性能的瓶颈了,接下来我们也能大致拟定一个优化的方案了。需要说明的是,因为之前也定期使用UWA的线上检测工具,感觉线上检测工具虽然耗时较长(可能要一天),但是分析的功能和深度还是更胜一筹,当然UWA GOT的优势重在灵活和高效,所以建议大家结合起来用。


文末,感谢韩宇飞的分享,小编有幸也体验了他们的游戏,是一款俯视角英雄枪战手游,同时融合了MOBA的属性,创造性地将操作感与策略性,游戏创造性地将职业以及英雄技能加入到了传统射击游戏中,欢迎大家戳此传送门来了解哦!https://www.taptap.com/app/14617
QQ20170922-191011.png


关于UWA GOT

UWA GOT 全称 Game Optimization Toolkit,是由侑虎科技研发的本地性能测评工具。它既能方便研发团队在本地直接进行真机测试,也支持在Unity Editor中搭建本地服务器来接收和分析性能数据。整个测试过程中,研发团队能自定义测试时间和流程,几分钟后即可查看性能数据,同时还提供深度的数据分析,如脚本中的主要函数耗时、堆内存的具体分配堆栈等高级分析功能,从此为大家的项目性能又增添一份安全堡垒!

UWA GOT 目前提供 Performance Overview、Mono Memory Analysis 和 Runtime Asset Tracker三大功能。