浅谈Addressable 和 AssetBundle

AssetBundle的概念
AssetBundle又称AB包,是Unity提供的一种用于存储资源的资源压缩包,是对Unity 初始Resources的一种扩展;一般使用的策略是把必须的资源和不需要更新的资源放在Resources文件夹下,其他的资源放在AssetBundle下面。

Unity中的AssetBundle系统是对资源管理的一种扩展,通过将资源分布在不同的AB包中可以最大程度地减少运行时的内存压力,可以动态地加载和卸载AB包,继而有选择地加载内容。
AssetBundle的优势

  1. AB包存储位置自定义,继而可放入可读可写的路径下便于实现热更新。
  2. AB包自定义压缩方式,可以选择不压缩或选择LZMA和LZ4等压缩方式,减小包的大小,更快的进行网络传输。
  3. 资源可分布在不同的AB包中,最大程度减少运行时的内存压力, 可做到即用即加载,有选择的加载需要的内容。
  4. AB包支持后期进行动态更新,显著减小初始安装包的大小,非核心资源以AB包形式上传服务器,后期运行时动态加载,提高用户体验。
    AssetBundle的特性
  5. . AB包可以存储绝大部分Unity资源但无法直接存储C#脚本,所以代码的热更新需要使用Lua或者存储编译后的DLL文件。
  6. . AB包不能重复进行加载,当AB包已经加载进内存后必须卸载后才能重新加载。
  7. 多个资源分布在不同的AB包可能会出现一个预制体的贴图等部分资源不在同一个包下,直接加载会出现部分资源丢失的情况,即AB包之间是存在依赖关系的,在加载当前AB包时需要一并加载其所依赖的包。
  8. 打包完成后,会自动生成一个主包(主包名称随平台不同而不同),主包的manifest下会存储有版本号、校验码(CRC)、所有其它包的相关信息(名称、依赖关系)

AssetBundle的使用流程比较繁琐,大致上分为五个阶段:分组、打包、加载包、加载资源、卸载包。

(1) 分组:分组就是将资源按照特定的分组策略将资源归类,这些类型在打包阶段会生成各自的资源包,AssetBundle分组需要考虑一些关键因素包括:资源之间的关联性(尽量将相互依赖的资源放在一个资源包内)、资源动态性(尽量将需要频繁加载的资源放在一个资源包内)、资源大小(尽量不要将大资源和小资源放在一个资源包内)、版本管理(Variable是对资源包的进一步分组,比如资源包的不同版本,当设置了不同的Variable,AssetBundle将会对变体进行单独打包)。
(2) 打包:通过Unity内置的BuildPipeline API可以实现将设置分组的资源进行打包,具体的打包流程包括: (a) 遍历AssetBundle分组:Unity会遍历每个已设置的AssetBundle分组。 (b) 查找分组中的资源和依赖项:对于每个分组,Unity会查找分组中的资源及其依赖项,并创建一个资源清单。 © 序列化资源和依赖项:Unity会将这些资源和依赖项进行序列化,并将它们保存到一个二进制文件中,以供加载时使用。 (d) 生成资源包文件:通过将资源清单和序列化的资源打包成二进制文件,Unity生成一个包含所有资源的AssetBundle文件。 (e) 压缩和加密(可选):可以选择对生成的AssetBundle文件进行压缩和加密,以确保资源的安全性和网络传输效率。
(3) 加载包:经过打包后,资源包并没有被加载进内存,通过AssetBundle API可以将资源包加载进内存。
(4) 加载资源:通过资产包在内存中的对象来加载包中的资源。
(5) 卸载资源:当资源被加载进内存后,资源就由应用程序接管了,资源包就可以从内存中卸载了。

Addressable概述
鉴于AssetBundle的局限性,Unity进一步在AssetBundle API的基础上开发了Addressable。Addressable可在 Unity 编辑器中为开发者提供用户界面,并自动执行以前只能在脚本中手动管理的流程。使用Addressable系统,开发者可以在 Unity 编辑器中组织资源,并让系统处理依赖项、资源位置以及内存分配和解除分配。

1.安装Addressable
在Window->Package Manager中的Unity Registry中搜索Addressable,并安装。
在这里插入图片描述

安装成功后,可以看到多出了一个Window / Asset Management / Addressables菜单,
在这里插入图片描述

2、创建Addressables Settings
点击Groups菜单,点击Create Addressables Settings按钮,并新建一个Group
在这里插入图片描述
其实每个Group都 是一个配置文件
在这里插入图片描述
3.选中资源文件,在Inspector窗口中勾选Addressable,它会自动添加到默认的Group中,也可以手动拖拽进去
在这里插入图片描述
4.设置Build Path与Load Path
在Inspector窗口中,选中Packed Assets,将Build Path改为RemoteBuildPath,将Load Path改为RemoteLoadPath,如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7937f7e918244ebeaabce228deac7e80.png
在这里插入图片描述
这样Packed Assets打出的资源就在包体外,它会被打到工程目录的ServerData目录中

而加载的时候,会去远程http://[PrivateIpAddress]:[HostingServicePort]这个地址加载(这里是localhost,我们可以改成别的IP或域名地址)

5.打Addressable资源包
在Addressables Groups窗口中,点击Build / New Build / Default Build Script,就会开始打Addressable资源包了,等它打包完毕即可
在这里插入图片描述
6、加载Addressable资源
我们加载资源的时候,并不需要知道目标资源到底是在哪个Group中,也不需要知道这个Group到底是本地资源包还是远程资源包,统一通过资源的Addressable Name来加载
在这里插入图片描述
刚接触Addressable,如有问题烦请指出。谢谢。后续持续更新。。。

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值