资源管理也能快如闪电!

资源管理也能快如闪电!

几乎所有的Unity开发者都曾为AssetBundle管理机制填过“坑”。如何巧妙合理地设计AssetBundle的依赖关系来尽可能减小包体的大小?怎样针对不同的资源选择不同的API来提高加载的效率?想必你也肯定有过类似的疑问,今天我们将结合UWA性能检测与分析报告,为大家分享针对资源管理中的优化方式,从而高效地定位资源漏洞并优化解决。

我们将针对资源管理分别介绍优秀级大师级优化方式。(没错,今天就是为那些将要晋升为CTO的工程师准备的福利!)

请输入图片描述


一、优秀的优化方式

1. 查看资源加载(卸载)

在UWA性能测评报告的资源管理页面中,研发团队可以方便地查看项目运行时资源的加载情况,如通过Resources.Load/LoadAsync、AssetBundle加载(卸载)的具体资源信息。
请输入图片描述

我们提供了三种模式供大家自由地查看:查看所有资源、查看指定场景所用资源和查看指定帧所用资源
请输入图片描述
通过该界面,研发团队可以明确:

(1)项目运行过程中,哪些资源是通过Resources.Load/LoadAsync来加载的;
(2)项目运行过程中,哪些资源存在频繁加载的情况;
(3)项目运行过程中,资源加载的具体时间点;
(4)项目运行过程中,资源加载的具体耗时。

建议大家通过以上四点,来快速定位资源加载存在的问题和漏洞,并及时对加载逻辑代码进行完善。

2.关注AssetBundle文件加载/卸载方式

在UWA性能测评报告中,大家可以直接查看项目运行时AssetBundle文件的加载方式。目前关于Unity AssetBundle的主流加载方式有以下四种:New WWW、WWW.LoadFromCacheOrDownload、AssetBundle.Load/CreateFromFile和AssetBundle.Load/CreateFromMemory。
请输入图片描述

点击上图中每个Widget,就可以看到该加载方式的具体使用情况。下图为New WWW在游戏运行过程中的整体调用情况;
请输入图片描述

建议研发团队对LoadFromMemory谨慎使用。由于LoadFromMemory的加载效率相较其他的接口而言,耗时明显增大,因此我们不建议大规模使用。如果希望对AssetBundle文件加密,那么建议仅对重要的配置文件、代码等进行加密,对纹理、网格等资源文件则无需进行加密。因为目前市面上已经存在一些工具可以从更底层的方式来获取和导出渲染相关的资源,如纹理、网格等,因此,对于这部分的资源加密并不是十分的必要性。

3.关注AssetBundle的具体使用情况

在UWA性能测评报告中,研发团队可以从以下几个方面直接查看AssetBundle文件的具体使用情况。

请输入图片描述

通过该界面,研发团队可以明确:
(1) AssetBundle文件在项目运行过程中的具体加载时间点;
(2) 具体加载的AssetBundle文件名称;
(3) 具体AssetBundle文件的存放位置;
(4) 每个AssetBundle文件的加载次数。

注意:UWA建议研发团队时刻关注AssetBundle文件的加载次数,查看是否存在同一AssetBundle被持续加载的情况,如上图中蓝色方框1和2所示。


二、大师级优化方式

除了以上提及的优化方式,下文我们将介绍性能优化中省时高效的黑科技,如何在极短时间内快速定位到问题的瓶颈,节省优化的时间,这些分析利器你千万不可错过!

1.查泄露、查驻留,一个都不能少

在UWA性能测评报告的资源管理页面中,研发团队可以方便地查看项目运行时AssetBundle在内存中的驻留情况,从而快速看到AssetBundle是否存在泄露的问题。
请输入图片描述
上图的AssetBundle使用数量在不断上升,很可能存在AssetBundle资源泄露问题。

同时,研发团队也可以查看指定AssetBundle文件在项目运行过程中的的加载和卸载情况。点击上图的某一帧或某一场景,我们就能查看对应的具体AssetBundle信息,包括具体名称、存放的位置、加载方式、内存中的驻留时长和由该AB加载出的资源数量。
请输入图片描述

除此之外,UWA报告也提供资源内存的泄漏分析,通过资源的“场景比较”如同种类型场景或同一场景进行比较、不同类型场景进行比较等功能,从而更快速地找到存在“泄露”问题的资源。
请输入图片描述

2.时刻关注GameObject的Instantiate/Destroy情况

在UWA性能测评报告的资源管理页面中,研发团队不仅可以查看到项目运行时GameObject的Instantiate和Destory调用次数,还可以详细查看每次调用时的具体GameObject信息。
请输入图片描述

建议研发团队对表格中操作次数大于50的GameObject进行详细分析,避免同一GameObject频繁Instantiate和Destory的操作出现。

3.关注GameObject的Active/Deactive情况

此外,UWA的性能报告界面中还提供了项目在运行时,GameObject的具体Active和Deactive情况。
请输入图片描述

很多使用过的用户都反馈“大吃一惊”!因为在项目运行1~2万帧的时间里,GameObject Active/Deactive执行了几万甚至几十万次。

如果大家的项目中也存在上述过量的Active/Deactive调用,那么UWA建议可以直接查看页面下方的表格,了解到底是哪些GameObject存在大量的调用操作,然后检测与其相关的脚本,即可快速完善和修复这一问题。
请输入图片描述

当然,要想驾驭好这些优化利器,还需要有扎实的引擎原理基础,在此小编为大家送上UWA的几篇干货,相信能为大家在资源管理方面的优化事半功倍!


关于UWA

由侑虎科技开发的游戏/VR应用性能优化平台,目前提供1)性能检测与优化2)资源检测与分析 两大工具。 同时,我们也会为大家开发更省心的功能,希望通过它们可以减少开发者反复测试定位问题的时间,从而将更多的精力集中在 项目开发和解决问题中,能为大家项目研发省下的任何一分一秒,都是UWA团队的骄傲。