Unity AB包基础知识与操作

目录

1.AB包理论基础

2.AB包相较于Resources的优势

        2.1资源管理更加灵活

        2.2支持多样压缩格式

        2.3支持热更新 

3.AB包资源打包

        3.1给资源设置对应的AB包

        3.2打包

4.AB包资源加载

        4.1AB包同步加载

        4.2AB包异步加载

5.AB包卸载

         5.1卸载所有AB包资源

        5.2卸载单个AB包

6.AB包之间的依赖关系

        6.1依赖关系

        6.2借助主包获取依赖信息


AB包基础知识与操作

1.AB包理论基础

AB包是AssetBundle的缩写,是Unity提供的资源压缩包,用于存储各种资源,比如模型、贴图、预制体等(不包括C#脚本)

2.AB包相较于Resources的优势:

2.1资源管理更加灵活

使用AB包进行资源管理,资源可分布在多个AB包中,按需加载,减少运行时内存压力,且其存储路径可自定义(如可读写路径);而使用Resources进行资源管理,所有资源必须集中存放在Resources目录下,打包后资源只读且无法动态更新。

2.2支持多样压缩格式

AB包:

  • 持多种压缩方式:
    • LZMA:高压缩率,适合网络传输,但解压需全包加载。
    • LZ4:按需解压,内存占用低,推荐高频使用场景。
  • 初始包体更小,非核心资源可后期动态加载

Resources:

        资源统一压缩为二进制,无法灵活选择压缩方式。

2.3支持热更新 

AB包:

        支持动态更新,可将新资源上传至服务器,运行时下载并加载。

Resources:

        打包后资源不可修改,无法实现热更新。

3.AB包资源打包

3.1给资源设置对应的AB包

以材质为例

3.2打包

切换到打包工具Build页签。

主要设置参数:

BuildTarget:选择需要打包到的平台。

OutputPath:目标输出路径。

Clear Folders:每次打包是否清空文件夹重新打包。

Copy to StreamingAssets:如其名,是否拷贝到StreamingAssets文件夹下。

Compression为选择打包方式,可选择"不进行压缩"(解压快,内存占用高)、“LZMA压缩”(高压缩率,但解压需全包加载,解压慢)、“LZ4压缩”(按需解压,内存占用低,推荐高频使用场景)三种方式。

 点击Build按钮进行打包。

打包后,可以在与Asset同级目录下找到输出路径对应的文件夹。

PC为主包,其中记载了AB包之间的依赖关系。

没有后缀的为资源文件。

.manifest后缀的为对应资源文件的配置信息文件。

4.AB包资源加载

这里以上述material举例,从AB包中加载得到Material替换场景上Cube的默认材质。

4.1AB包同步加载:

先加载资源所在AB包,再加载AB包中的资源,这里推荐使用指定类型的资源加载(不同类型之间可能重名导致冲突),再将场景上的Cube更改材质

注意:这里我打包时勾选了Copy to StreamingAssets,所以我可以直接在该文件夹下找到AB包。

运行结果:

4.2AB包异步加载:

也是先加载AB包再加载资源,这里借助协程搭配AB包异步加载API来实现上述同样效果。

运行结果:

AB包被加载后,其中所有资源都可以被加载出来,也就是说,假设我们“material”包中有多个资源,我们可以只加载一次该包,通过该包获取其中所有资源。

注意:同一个AB包不能被重复加载,否则会报错。

5.AB包卸载

 5.1卸载所有AB包资源

参数为true时,卸载会把AB包加载出来的资源也一起卸载。

示例:

当我点击鼠标左键时,Cube上替换的材质也会被卸载。

5.2卸载单个AB包

对于每个AB包,其都可以通过Unload的API自行卸载。

其后面bool参数跟上述同理。

6.AB包之间的依赖关系

6.1依赖关系

上面我们谈到了AB包的加载,AB包的加载与其依赖关系往往是密不可分的。

假设我们打包了一个Cube预制体到cube包中,该Cube使用到了上述material包的"Material"材质,那么现在我们只加载Cube包,将其中的Cube资源加载并创建出来,会不会出现什么问题呢?

我们写段代码来测试一下

结果:

可以看到其材质资源发生了丢失。

这是因为我们没有加载material包,而cube包中的cube材质是依赖与material包中相关资源的。

解决方案:

1.将相关资源都打包到一个包中

2.将其所依赖的包也一起加载出来

这里我们以第二种解决方案为例,进行演示。

将material包也一起加载出来

可以看到丢失材质得以解决。

那么如果出现一个AB包依赖于几十个甚至上百个其他AB包,难道我们都要手动去加载相关AB包么?

6.2借助主包获取依赖信息

根据主包的abManifest文件(这里主包指我们上述的PC包)可以获得每一个AB包的依赖关系。

步骤:加载主包->加载主包的abManifest文件->根据文件得到指定AB包的依赖信息->加载依赖的所有包

简单示例:

注意:通过主包得到的是包与包之间的依赖关系,无法精准得到资源与资源之间的依赖关系。

参考教程:2023-06-08 Unity AssetBundle1——AB包介绍与使用_unity ab包-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值