中国建设工程监理网站,ie域名,做网站的中文名字,网站建设前的前景前言
本篇文章主要讲解对于Unity Android平台也就是APK包体的优化经验#xff0c;使用哪些工具能够更加便利的定位资源重灾区。本篇讲解的方法中对于Unity资源使用的AssetBundle的方式#xff0c;如果使用addressable或其他资源管理方式#xff0c;我还不是很清楚是否适用使用哪些工具能够更加便利的定位资源重灾区。本篇讲解的方法中对于Unity资源使用的AssetBundle的方式如果使用addressable或其他资源管理方式我还不是很清楚是否适用没有去验证过。
工具选择
工欲善其事必先利其器。对于优化包体这项工作我们需要选择各种工具搭配使用才能准确定位资源重灾区并选择合适的方式进行优化。下面先讲讲我们需要用到的各种工具。
AndroidStudio
AndroidStudio自带APK分析器我们使用AndroidStudio也主要用到他的APK分析器来分析包体结构以及对比我们的优化效果 只需要将APK拖入AndroidStudio就能够分析APK结构信息 优化完成后我们还能通过对比两个APK来比较优化效果
关于更多APK分析器的内容可以查看开发文档 AssetStudio
我们可以使用AssetStudio对资源包进行解包这里的资源包包括AssetBundle包以及Unity Resources文件打的包assets/bin/Data/目录下的资源。
如果项目使用了资源加密在优化的时候需要暂时先取消优化后再开启资源加密由于AssetStudio只支持Windows版本如果你使用Mac可以使用Parallels Desktop虚拟机安装或者尝试使用命令行版本UnityPy 只需要加载文件夹就可以解析所有资源这个工具多数用来反编译爬取资源这样不可取用来辅助优化包体大小也很有用。选择Export-Asset list to XML-All Assets导出所有资源信息的xml格式。 通过这个表我们可以知道这个名字、大小、被哪些资源引用、类型信息。这样我们就可以通过自定义解析代码来分析优化。
Unity工程Editor工具
上面的工具可以让我们知道哪些资源为占用高的资源确定了之后我们是能够删除这些资源还是进行资源优化就需要使用到各种Unity Editor内创建的工具了。
资源引用查找工具
https://github.com/blueberryzzz/ReferenceFinder
下载上面这个工具我们可以通过查找资源的依赖关系对于哪些没有被使用的模型、贴图、材质球就可以直接删除方便快捷。
资源引用丢失查找工具
为了防止我们错删误删资源我们还需要一个安全检查机制使用一个引用丢失查找工具就很好的帮我们检查。这部分可以去网上找找其他博主附有代码文章还是有很多分享的内容大差不差我这里就不浪费篇幅把代码贴出来了。
AssetBundle Browser
这是一款Unity提供的插件工具非常强大的工具
Unity Asset Bundle Browser tool | Package Manager UI website
可以很方便的查看资源被打到哪些AB包并且是否存在多个包引用同一个资源导致的资源重复引入问题 但是由于这个工具用起来很消耗CPU性能确实有点卡卡的较为简单的可以直接使用 ReferenceFinder就能解决。
优化思路
从优化方向来看有下面几个方向
删除APK中没有用到的资源重新分配重复打包资源优化资源打包参数TextMeshPro的纹理导出尺寸、图集压缩等级....
其中重复打包资源这个是不易察觉并且也可能是导致包体莫名其妙变很大的根本原因这个问题不光导致包体增大同时也会导致内存翻倍优化优先级很高并且回报率也很高。
1.删除APK中没用到的资源
注意这里说的是APK中没用到的资源意味着已经被打入APK包体内但是实际上游戏是用不到的资源如果去找工程没用到的资源可能会非常多这些资源如果没有被场景需要被Build的场景、AB包、Resources目录下引用就不会被打入最终的APK去。
要删除这些资源可以通过ReferenceFinder查找哪些资源没有被引用然后删除即可。
2.重新分配重复打包资源
这部分资源的占比如果没有很好的管理或者在日常开发中严格按照开发流程来做主要是美术就很容易出问题。
通过使用AssetBundle Browser工具辅助重新分配出问题的资源。
对于Resources目录下的资源就需要小心处理
警惕Resources资源
在优化包体的时候注意到assets/bin/Data/这个目录很大但是由于项目所用到的资源都是AB管理的理应不这么大通过AssetStudio查看发现里面包含了字体文件以及项目中用到的TextMeshPro生成的字符资源最终发现是由于TMP_Settings这个设置文件资源引起的问题由于这个资源会被TMP插件自动放到Resources目录下Unity打包就会打进去 如果这里设置了项目中的TMP_Font Asset恰好这个资源原本已经打了AB包那此时就会在assets/bin/Data目录下多存在一份全套的字体资源