巧用UWA资源检测,轻松剔除冗余资源!

巧用UWA资源检测,轻松剔除冗余资源!

AssetBundle中的冗余资源,常常是项目优化中容易忽略的问题,但它们对项目带来的危害却不容忽视。冗余的资源本身会在项目文件中占据额外的空间,还有可能在内存中多次被加载,占据内存。UWA提供的AssetBundle资源检测功能,能让研发团队在几分钟内,定位到所有AssetBundle中包含的冗余资源,轻松对这些资源执行定点优化。


我们在实际项目开发流程中,总会出现一些仅凭经验难以预料的意外情况,即使是老练的开发者,没有工具协助,仅凭个人直觉也很难察觉;即使是磨合完善的项目组,也难以兼顾各个成员的工作流程。除此之外,有很多原本性能优越的制作方式,可能在一次两次Unity版本升级后,变得不再适用。因而定期使用优化检查工具进行追踪,对于保证项目质量是非常必要的。

而一套能够快速对项目进行优化检查的工具,可以帮助项目组跳过工作流程本身,直接基于反馈的质检结果对关键点进行优化,达到快速提高项目性能的目的。

UWA提供的AssetBundle资源检测功能,就是这些工具中可以独当一面的好手。它能让项目组在几分钟内,定位到所有AssetBundle中包含的冗余资源,轻松地对这些资源执行定点优化,大量节省优化时间,下面我就来分享下使用方法和实现的效果:


使用方法

1. 提交检测
以我们自己的开发流程为例。使用UWA资源检测功能时,关注冗余资源数以及冗余资源内容,能很快定位优化点。在项目进行初次检查时,我们也自认为已经精确地将资源文件合理分包,但实际检查结果却有16个冗余资源。
请输入图片描述

这种情况是完全在我们意料之外,因此也难以凭借经验对问题进行分析。最直接的解决方法,只有对资源文件进行地毯式搜索检查,而这会耗费项目组大量时间和精力。

好在UWA本身对冗余资源有追踪。再点击“冗余资源数”按钮后,列表中就能显示所有冗余的资源和相应的AssetBundle文件。
请输入图片描述

2. 分析原因
在冗余资源已经定点的情况下,我们很快分析得出:不打包进入AssetBundle中的资源,如果被其他资源引用,会被复制到其他资源所在的AssetBundle。

3. 解决方案
很直接了当,PluginAsset中的资源文件全部打包到AssetBundle并最早进行加载。经过大约一小时的简单处理后,再次打包AssetBundle使用UWA资源检测,冗余资源被全部清除。
请输入图片描述

4. 养成“每生成一个包就提上来检测”的习惯
之后项目开始定期打包并使用UWA工具进行检查。在Unity引擎升级到5.4后的第一次例行检查中。我们发现总资源数目有明显上涨。
请输入图片描述
这时候,从UWA调出上次测试数据后,对比发现主要是贴图(Texture2D)资源数量有爆发增长。但实际Sprite引用数量却变化不大。
请输入图片描述

直接观察资源列表后,发现有大量Sprite没有被Unity打入图集中。正常打包后,所有被Sprite引用的贴图,都不应该在Texture2D中显示,而是在打包AssetBundle时已经被Unity合并为如下图命名以SpriteAtlasTexture-打头的图集Texture2D。
请输入图片描述

由于我们项目使用脚本,在发布时自动根据文件所在路径设置SpriteTag。因此很容易定位到是脚本问题,虽然该脚本在Unity5.3版本运行一直正常。经过后续研究发现,Unity5.4版本中,精灵的SpriteTag改变后,必须重新导入贴图才能确保生效。(我们使用Unity引擎自带的精灵图集系统)。因此非常感谢UWA提供的支持,使我们一开始就确定是图集问题,省下了大量测试排查的时间和精力。

重新整理SpriteTag后,再次打包发现仍然有9个冗余资源残留。
请输入图片描述
检查冗余资源列表后,发现都是Unity自带的材质和贴图资源。包括默认的粒子材质Default-Particle,默认精灵材质Sprites-Default等等。也就是根本不是我们自己在项目中添加的资源。

请输入图片描述

在UWA资源检测工具协助下,定位和处理冗余资源就是这么容易。各种版本变更、操作失误、流程问题造成的资源冗余也在定期检查之下无所遁形。


感谢作者欧月松(QQ:420580215)供稿并分享了他巧用工具来告别加班、提升效率的小技巧。如果你也有这样的烦恼,请戳UWA官网

作者也是U Sparkle活动参与者,UWA欢迎更多开发朋友加入U Sparkle开发者计划,这个舞台有你更精彩!

请输入图片描述