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.mzph.cn/news/69688.shtml

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

相关文章

使用pyenv安装python缓慢或无法安装

使用pyenv安装python缓慢或无法安装 这一定程度上和网络情况有关,下面提供几个常见方法: 关闭 VPN 后重新安装使用管理员权限打开命令窗口后安装如下 手动安装 pyenv 在执行 pyenv install --- 命令的时候,会连接远程库,将要安…

matlab使用教程(28)—微分方程(ODE)求解常见问题

1.非负 ODE 解 本博客说明如何将 ODE 解约束为非负解。施加非负约束不一定总是可有可无,在某些情况下,由于方程的物理解释或解性质的原因,可能有必要施加非负约束。仅在必要时对解施加此约束,例如不这样做积分就会失败或者解将不…

springboot项目中application.properties无法变成小树叶问题解决

1.检查我们的resources目录的状态,看看是不是处在普通文件夹的状态,如果是的话,我们需要重新mark一下 右键点击文件夹,选择mark directory as → resources root 此时我们发现配置文件变成了小树叶 2.如果执行了上述方法还是不行…

智能手机收入和出货量双双下滑,造车成本不断增长,小米集团仍面临风险

来源:猛兽财经 作者:猛兽财经 华尔街分析师对小米集团第二季度的业绩预测 在8月29日小米集团(01810)公布其2023年第二季度财报之前,华尔街分析师曾预测该公司第二季度的业绩将超出2023年第一季度的业绩。 根据S&P …

uniapp点击事件在小程序中无法传参

这个问题很是神奇,第一次遇到。在h5中,点击事件可以正常传参,打包小程序后确失效了。 修改:for循环中的key,使用 index就好了

计算机竞赛 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸表情识别 该项目较…

Web前端自动化测试Cypress实践总结

本文主要首先主要介绍了什么是自动化测试,接着对常用的自动化测试框架进行了对比分析,最后,介绍了如果将自动化测试框架Cypress运用在项目中。 一、自动化测试概述 为了保障软件质量,并减少重复性的测试工作,自动化测…

Java中网络的基本介绍。网络通信,网络,ip地址,域名,端口,网络通信协议,TCP/IP传输过程,网络通信协议模型,TCP协议,UDP协议

- 网络通信 概念:网络通信是指通过计算机网络进行信息传输的过程,包括数据传输、语音通话、视频会议等。在网络通信中,数据被分成一系列的数据包,并通过网络传输到目的地。在数据传输过程中,需要确保数据的完整性、准…

1773_把vim的tab键设置为4个空格显示

全部学习汇总: GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. 有时候自己觉得自己很奇怪,看着Linux的命令窗口就觉得很顺眼。那些花花绿绿的字符以及繁多的方便命令工具,确实是比Windows强不少。不过&a…

FBX SDK 开发环境配置 visual studio 2022

FBX | Adaptable File Formats for 3D Animation Software | Autodesk. 下载windows的sdk并安装. 创建一个c console 工程 设置include目录 添加预处理宏 FBX_SHARED1 添加fbx sdk lib 目录 添加依赖lib : libfbxsdk-md.lib libxml2-md.lib zlib-md.lib 配置完毕.

JS 方法实现复制粘贴

背景 以前我们一涉及到复制粘贴功能,实现思路一般都是: 创建一个 textarea 标签 让这个 textarea 不可见(定位) 给这个 textarea 赋值 把这个 textarea 塞到页面中 调用 textarea 的 select 方法 调用 document.execCommand…

go锁-waitgroup

如果被等待的协程没了,直接返回 否则,waiter加一,陷入sema add counter 被等待协程没做完,或者没人在等待,返回 被等待协程都做完,且有人在等待,唤醒所有sema中的协程 WaitGroup实现了一组协程…

TCP的滑动窗口协议有什么用?

分析&回答 滑动窗口协议: TCP协议的使用维持发送方/接收方缓冲区 缓冲区是 用来解决网络之间数据不可靠的问题,例如丢包,重复包,出错,乱序 在TCP协议中,发送方和接受方通过各自维护自己的缓冲区。通…

csharp开发日常之Activator.CreateInstance构造函数生成实例

目录 一、需求:项目中经常需要动态生成对象,而非采用new关键字方式,例如Java里面的根据类全限定名反射生成对象实例。 二、方案:采用Activator.CreateInstance 三、代码例子演示 1、代码结构 2、创建接口 3、创建IObjcet接口的…

FPN模型

【简介】 2017年,T.-Y.Lin等人在Faster RCNN的基础上进一步提出了特征金字塔网络FPN(Feature Pyramid Networks)技术。在FPN技术出现之前,大多数检测算法的检测头都位于网络的最顶层(最深层),虽说最深层的特征具备更丰富的语义信息&#xff0…

Python类的方法

Python类的方法主要分为实例方法、类方法和静态方法三种。 1 实例方法 以self作为第一个参数的方法,就是类的实例方法。该方法由类的实例调用,Python会把调用该方法的实例对象传递给self。 如下代码定义了一个名为A的类。 class A:def __init__(self…

空间曲线的参数方程

空间曲线的参数方程 二维直线 经过一点 P ( x 0 , y 0 ) P(x_0,y_0) P(x0​,y0​)的方向向量为 n ( c o s θ , s i n θ ) n(cos\theta,sin\theta) n(cosθ,sinθ)的直线参数方程为: [ x y …

存储空间压缩6倍 ,多点DMALL零售SaaS场景降本实践

🧑‍💼 作者简介 冯光普:多点 DMALL 数据库团队负责人,负责数据库稳定性建设与 DB PaaS 平台建设,在多活数据库架构、数据同步方案等方面拥有丰富经验。 杨家鑫:多点高级 DBA,擅长故障分析与性能…

接口参数校验

方式一:使用hibernate-validator注解方式参数校验 类似的框架太多了。缺点:返回的提示信息顺序不太确定 文档:https://hibernate.org/validator/documentation/ 参考资料:https://blog.csdn.net/weixin_45080272/article/details…

实战 - Restful APi 格式规范

文章目录 1. 特征2. 优点3. 动作1. GET 获取资源2. POST 创建资源3. PUT 整体替换4. PATCH 部分替换5. DELETE 删除资源 4. 示例 RESTful是一种API的设计风格,他和GraphQL ,JSON-RPC,WebService类似,用于定义在CS、BS架构下暴露服…