学习笔记:Unity热更新(一)AssetBundle介绍&生成AB包文件

  • Post author:
  • Post category:其他




AssetBundle是什么

AssetBundle简称AB包,可以理解为压缩包。里面包含了多个文件。

不同的平台(ios 安卓 windows等等)有不同的资产压缩包。

压缩包中包含模型贴图预制体音效材质球等等。(不能将C#代码打包进去,这也是热更新用lua来做的原因)

这些文件可以分为两类:serialized file 和 resource files(序列化文件和源文件)。serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个);resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载。



AB包有什么作用


相对Resources下的资源,AB包更好管理资源:


Resources打包时就定死了,只读,无法修改,只能通过resources.load加载文件。

AB包一般从网络上下载,也可以从本地自动打个包出去,存储位置可以自定义,压缩方式也可以自定义,后期可以动态更新。


减小初始包大小


AB包会压缩资源

减少初始包大小:AB包一般是存在服务器上的,对玩家来说,可以下一个小的apk,然后再慢慢下载


做热更新


资源热更新和脚本热更新(更新lua脚本)

热更新的基本规则:

从客户端出发去看:客户端自带很少的默认资源和资源对比文件

第一步:客户端获取资源服务器地址

第二步:通过资源对比文件,检测哪些需要更新,哪些需要下载。然后更新/下载AB包



生成AB包资源文件


unity编辑器开发,自定义打包工具


一些固定的代码,参考链接:

AssetBundle资源打包(一)

.


官方打包工具Asset Bundle Browser


这边介绍一下Asset Bundle Browser:

package manager搜索并安装Asset Bundle Browser

安装完即可看到多了个Packages文件夹

在这里插入图片描述

点击window也可以找到Asset Bundles Browser窗口

在这里插入图片描述

让项目中的资源和AB包关联:

创建一个cube预制体,点击预制体,看右下角

在这里插入图片描述

在这里插入图片描述

点击第一个None,新建一个包名,这里我起名为model

再打开Asset Bundles Browser窗口看一下:

在这里插入图片描述

看到窗口中有东西了,有名为model的包,model包中有一个cube,这样资源就可以打包了。另外C#代码是不可以打包的。

在这里插入图片描述


点击build界面

,可以看到上面

Build Target

是选择你要打包的平台,展开可以看到XBOX,PS4,switch等等平台的选项。

下面是选择保存路径

Output Path

。默认是给你存在项目目录的AssetBundles文件夹下。


Clear Folders

是否清空文件夹。


copy to streamingAssets

复制到streamingAssets下


Advanced Settings下



Compression

选择压缩方式

1.No Compression不压缩,快,包大

2.LZMA压缩的文件最小,解压比较慢,用一个资源会将所有的都解压。

3.LZ4比LZMA大一点点,用什么解压什么

其他人的解释(来自网络):

LZ4压缩:基于Block,资源分块,一个块一个小包,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。 注意使用LZ4压缩,可以获得可以跟不压缩想媲美的加载速度,而且比不压缩文件要小;

LZMA压缩:基于Chunk的压缩,读取Header,找到Chunk,然后再找Block

在这里插入图片描述

往下看:

ETI 在资源包中包含资源类型信息

FR 重新打包时需要构建包,不会删除不再存在的包

ITTC 增量构建检查时,忽略类型数的更改

AH 哈希值附在包名上

SM 严格模式,打包报错的话打包直接失败

DRB 运行时构建


点build打包后


根据链接可以找到包

首先是AB包文件model:当时是给cube打到model中了

然后是两个manifest文件:包含了AB包的文件信息,当加载时,提供了关键信息,资源信息,依赖关系,版本信息等。

然后是一个和目录文件夹同名的文件:主包,记录AB包的依赖关系

在这里插入图片描述

在这里插入图片描述


点击Inspect界面


这是个检查页面,可以将之前打的包添加到此页面中,看看包中的资源

在这里插入图片描述



版权声明:本文为akuojustdoit原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。