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

简介:

我们在实际项目开发流程中,总会出现一些仅凭经验难以预料的意外情况,即使是老练的开发者,没有工具协助,仅凭个人直觉也很难察觉;即使是磨合完善的项目组,也难以兼顾各个成员的工作流程。除此之外,有很多原本性能优越的制作方式,可能在一次两次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资源检测工具协助下,定位和处理冗余资源就是这么容易。各种版本变更、操作失误、流程问题造成的资源冗余也在定期检查之下无所遁形。





原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

目录
相关文章
|
4月前
|
负载均衡 算法 Serverless
异步任务处理系统问题之实现负载随机分片的问题如何解决
异步任务处理系统问题之实现负载随机分片的问题如何解决
|
4月前
|
监控 Java 开发工具
### 绝招揭秘!Android平台GB28181设备接入端如何实现资源占用和性能消耗的极限瘦身?
【8月更文挑战第14天】本文介绍在Android平台优化GB28181标准下设备接入的性能方法,涵盖环境搭建、SDK集成与初始化。重点讲解内存管理技巧如软引用、按需加载资源,以及通过硬件加速解码视频数据和图像缩放来减轻CPU与GPU负担。同时采用线程池异步处理视频流,确保UI流畅性。这些策略有助于提高应用效率和用户体验。
58 0
|
5月前
|
消息中间件 存储 Java
三类代码协同模式问题之压缩异常输出以提高性能和节省存储空间的问题如何解决
三类代码协同模式问题之压缩异常输出以提高性能和节省存储空间的问题如何解决
|
6月前
|
监控 Java 测试技术
五步定位性能瓶颈
五步定位性能瓶颈
86 1
|
7月前
|
缓存 Android开发 开发者
提升Android应用性能的实用策略
【5月更文挑战第30天】 在移动设备愈发成为日常生活不可或缺的一部分时,高效的应用程序显得尤为关键。特别是对于安卓开发者来说,优化应用性能不仅能够增强用户体验,还能提高应用在市场中的竞争力。本文将探讨一系列实用的策略,这些策略旨在帮助开发者识别和解决可能影响Android应用性能的问题,并确保应用在各种设备上都能流畅运行。
|
Java
策略枚举:消除在项目里大批量使用if-else的优雅姿势
可以替换大量的if-else语句,且具备较好的可读性与扩展性,同时能显得轻量化,我比较推荐使用策略枚举来消除if-else。
139 0
|
JavaScript 安全 前端开发
修改MD5值:降低iOS应用程序关联性判定,减少拒绝风险
ios应用程序存储一些图片,资源,配置信息,甚至敏感数据如用户信息、证书、私钥等。这些数据怎么保护呢?可以使用iOS提供的Keychain来保护敏感数据,也可以使用加密技术,或者使用Ipa Guard 来弱化文件名称含义,增加破解难度。实现保护iOS app应用程序不被反编译、破解或篡改。
|
存储 开发框架 负载均衡
限流的非常规用途 - 缓解抢购压力
限流的非常规用途 - 缓解抢购压力
125 0
|
缓存 JavaScript 前端开发
Partytown 如何消除第三方脚本所带来的网站膨胀
文章导读:Partytown,是一个轻量级的开源解决方案,通过将第三方脚本放在后台线程中运行的 Web Worker 来减少由于第三方 JavaScript 文件加载导致的执行延迟。
|
运维 监控 数据可视化
不改一行代码定位线上性能问题
性能问题。 大致的现象是: 我们提供出去的一个 OpenAPI 反应时快时慢,快的时候几十毫秒,慢的时候几秒钟才响应。