Unity AssetBundle
AB 包理论基础
学习目标
- AB 包是什么
- AB 包有什么作用
- 生成 AB 包资源文件
- 使用 AB 包资源文件
- AB 包资源加载管理器
AB 包是什么
- 特定于平台(安卓、IOS、PC)的资产压缩包,有点类似压缩文件
- 资产包括:模型、贴图、预设体、音效、材质球等等, 可以将 C#代码打包,所以需要 lua 来做热更新
AB 包有什么作用
- 相对 Resources 下的资源,AB 包更好管理资源 Resources:打包时定死,只读,无法修改;AB 包:存储位置可自定,压缩方式自定义,后期可以动态更新(网络,本地更新)。还可以减小包体大小,压缩资源,减少初始包大小
AB 包资源加载和 Resources 资源加载区别
- API 不同
- Resources 加载的资源,一定得放在 Resources 文件夹下
AB 包理论上来说放在任何地方都可以,但一般都放在 Application.streamingAssetsPath 或 Application.persistentDataPath - AB 包中是资源集合,Resources 下都是单个资源
AB 包资源打包
在 Unity 当中导入 Asset Bundle Browser
绑定资源到 AB 包
AB 包资源加载
使用 AssetBundle 类加载资源
同步加载
1 | AssetBundle ab = AssetBundle.LoadFromFile(path); |
1 | //第一步,加载AB包 |
注意:不能重复加载同一个 AB 包,否则会报错
异步加载
1 | private IEnumerator LoadAsset(string path, string assetName) |
卸载 AB 包
卸载所有 AB 包
1 | AssetBundle.UnloadAllAssetBundles(false); |
传入的 bool
- true:卸载已经使用的资源(也就是说场景当中使用了 AB 包中资源的对象将丢失资源)
- false:不卸载
卸载单个
1 | //第一步,加载AB包 |
AB 包依赖
关于 AB 包的依赖 — 一个资源身上用到了别的 AB 包中的资源。
这个时候如果只加载自己的 AB 包,通过它创建对象会出现资源丢失的情况。
这种时候需要把依赖包一起加载了才能正常。
我们可以通过加载主包,然后获取主包当中的Manifest
文件,再通过 Manifest
文件获取某个包的所有依赖
1 | //利用主包,获取依赖信息 |
注意:AB 包依赖,只能记录包与包之前的依赖,而不能记录包内资源自己的依赖。
比如:A 包当中的 1 资源依赖了 B、C 包,2 资源依赖了 D、E 包,那么 A 包的依赖就是 B、C、D、E,而不能记录 1 资源依赖了谁,2 资源依赖了谁。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Secret Garden!
评论