Unity项目包体优化经验方法论(Android平台)

前言

本篇文章主要讲解对于Unity Android平台也就是APK包体的优化经验,使用哪些工具能够更加便利的定位资源重灾区。本篇讲解的方法中对于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就能解决。

优化思路

从优化方向来看有下面几个方向

  1. 删除APK中没有用到的资源
  2. 重新分配重复打包资源
  3. 优化资源打包参数(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目录下多存在一份全套的字体资源🙃

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/123802.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Midjourney学习(四)光源类型prompt

序号类别光线名称英文名称描述用途示例1光线质地硬光Hard Light直接照射在主题上,产生明显的阴影和高对比度。强调轮廓,增加照片的戏剧性2光线质地软光/柔光Soft Light光线经过散射或扩散,产生柔和的阴影和低对比度。平滑细节,适合…

SQL注入案例

目录 一、简介 二、案例 1.发现注入点 2.寻找注入类型 3.寻找字段数 4.将传参值设为超出数据量的大值,联合查询找到回显位置 5.找到数据库 6.寻找库中的表 7.寻找表中列 8.查看表中数据 附:SQLMap注入 1.输入指令查数据库 2.输入指令查表 3…

物联网智慧种植农业大棚系统

一、项目背景 智慧农业是是将物联网技术和农业生产箱管理的新型农业,依托部署在农业生产现场的各种传感节点,以物联网网关为通道形成数据传输网络,可以实现控制柜、环境监测传感器、气象监测机器等设备的远程监控,达到及时高校的…

git:亲测体验rebase与merge

rebase与merge异同与最佳使用场景[1] 这个dev-cui分支从devlop分支切出后,一直都只有我一个人在开发&维护. 假如还有一位同事张三, 在devlop分支切出的分支dev-zhangsan上进行开发,他添加了一个glossary.md,而后进行了add & commit 此时项目开发完成,需要将两个分支合并…

kubernetes 之 minikube折腾记

参考官网教程,链接: https://minikube.sigs.k8s.io/docs/start/ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube安装完启动minikube:…

使用vue-pdf出现的卡顿,空白,报错,浏览器崩溃解决办法

如果想直接知道解决办法,请翻到最下面 今天,接到了一个新的需求,我们公司的PDF展示卡住了,导致浏览器直接奔溃。我也刚来公司不久,就去看看是怎么发生的,公司前同事用的vue-pdf,刚开始以为是文…

2023高教社杯 国赛数学建模B题思路 - 多波束测线问题

1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播, 在不同界面上产生反射, 利用这一原理,从测量船换能器垂直向海底发射声波信 号,并记录从声波发射到信…

基于Java+SpringBoot+Vue前后端分离精简博客系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

JVM调优记录

因为大量数据备份&#xff1b;导致在备份过程出现堆溢出的情况 当前情况 总内存&#xff1a;7.92G 已使用&#xff1a;3.7G jvm总内存最大&#xff1a;3.06G jvm非堆内存&#xff1a;最大1.23G&#xff0c;使用<170M jvm堆内存&#xff1a;最大1.83G 计算 如果预留2G扩展…

Redis 高可用及持久化

Redis 高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证提供…

IGES在线查看与转换

IGES 格式最初由美国空军开发并于 1980 年发布。该格式是集成计算机辅助制造 (ICAM) 项目的产品,该项目旨在通过集成操作来降低制造成本。 IGES 文件旨在允许航空航天相关设计在不同平台上传输,同时将数据丢失降至最低。 在 IGES 格式出现之前,不同公司创建的 CAD 和计算机…

把握市场潮流,溯源一流品质:在抖in新风潮 国货品牌驶过万重山

好原料、好设计、好品质、好服务……这个2023&#xff0c;“国货”二字再度成为服饰行业的发展关键词。以消费热潮为翼&#xff0c;越来越多代表性品类、头部品牌展现出独特价值&#xff0c;迎风而上&#xff0c;在抖音电商掀起一轮轮生意风潮。 一个设问是&#xff1a;在抖音…

【HttpRunnerManager】搭建接口自动化测试平台操作流程

一、需要准备的知识点 1. linux: 安装 python3、nginx 安装和配置、mysql 安装和配置 2. python: django 配置、uwsgi 配置 二、我搭建的环境 1. Centos7 &#xff08;配置 rabbitmq、mysql 、Supervisord&#xff09; 2. python 3.6.8 &#xff08;配置 django、uwsgi&am…

这些国外客户真直接

最近在某平台上遇到的客户&#xff0c;很大一部分都是非英语国家的客户&#xff0c;然而他们也有很多共性的习惯。 第一种&#xff1a;直接表达自己对这个产品感兴趣&#xff0c;然后接下来就没有下文了&#xff0c;而之所以可以看得懂&#xff0c;则是借助平台本身的翻译系统&…

自动化运维工具—Ansible

一、Ansible概述1.1 Ansible是什么1.2 Ansible的特性1.3 Ansible的特点1.4 Ansible数据流向 二、Ansible 环境安装部署三、Ansible 命令行模块&#xff08;1&#xff09;command 模块&#xff08;2&#xff09;shell 模块&#xff08;3&#xff09;cron 模块&#xff08;4&…

SourceTree 使用技巧

参考资料 SourceTree使用教程&#xff08;一&#xff09;—克隆、提交、推送SourceTree的软合并、混合合并、强合并区别SourceTree 合并分支上的多个提交&#xff0c;一次性合并分支的多次提交至另一分支&#xff0c;主分支前进时的合并冲突解决git创建补丁和打补丁 目录 一. …

Java:Springboot和React中枚举值(数据字典)的使用

目录 1、开发中的需求2、实现效果3、后端代码4、前端代码5、接口数据6、完整代码7、参考文章 1、开发中的需求 开发和使用过程中&#xff0c;通常会涉及四个角色&#xff1a;数据库管理员、后端开发人员、前端开发人员、浏览者 数据库使用int类型的数值进行存储&#xff08;e…

Mac不想用iTerm2了怎么办

这东西真是让人又爱又恨&#xff0c;爱的是它的UI还真不错&#xff0c;恨的是它把我的环境给破坏啦&#xff01;让我每次启动终端之后都要重新source激活我的python环境&#xff0c;而且虚拟环境前面没有括号啦&#xff01;这怎么能忍&#xff01;在UI和实用性面前我断然选择实…

C语言学习:6、C语言程序的循环结构

生活中&#xff0c;有很多循环的东西&#xff0c;比如钟表就是在1到12循环&#xff0c;太阳东升西落也是循环&#xff0c;春夏秋冬也是循环&#xff0c;人生可能也是一个循环。 while C语言中的循环可以这么描述&#xff1a;当某个条件成立&#xff0c;就一直做某件事或某些事…

学习笔记——Java入门第一季

1.1 Java的介绍与前景 Java语言最早期的制作者&#xff1a;James Gosling&#xff08;詹姆斯高斯林&#xff09; 1995年5月23日&#xff0c;Sun Microsystems公司宣布Java语言诞生。 1.2 Java的特性与版本 跨平台 开源&#xff08;开放源代码&#xff09; Java代码&#xff…