Unity 热更新之AB 包 简述
了解AB包是什么
特定于平台的资产压缩包,有点类似压缩文件
资产包括:模型、贴图、预设体、音效、材质球等等
了解AB包有什么作用
相对Resources下的资源AB包更好管理资源
1.减小包体大小
- 压缩资源(节约硬盘空间)
- 减少初始包大小(缩小首包大小,进入游戏后再下载)
2.热更新
- 资源热更新(添加资源)
- 脚本热更新(更新Lua脚本)
![image]()
生成AB包资源文件
1. Unity编辑器开发,自定义打包工具
这个没做过所以略
2. 官方提供好的打包工具:Asset Bundle Browser
对于高版本unity 中,已经不能通过包管理器下载(原因:高版本Unity 用Addressables 功能封装了AB包功能)
解决方法,个人是从github 上导入unity包中的,或者也可以将工程拖入unity 的 Editor文件夹中,这个是文件夹是需要自己创建的。
github 文件链接跳转 https://github.com/Unity-Technologies/AssetBundles-Browser
3.AssetBundleBrowser重要参数相关

4.AB包生成的文件


其中除了自定义的AB外,而外生成了一个主包,赋值存放AB 包的依赖关系
主包名由路径的最后名字为标准
使用AB包资源文件
Unity 提供的API
AB包同步加载
//同步加载
//AB包不能重复加载否则会报错
//加载AB包资源 用ab变成存储 文件夹里面的要加载的AB包路径
AssetBundle ab= AssetBundle.LoadFromFile("路径");
// 获得AB 包里面的 预制体资源
GameObject obj =ab.LoadAsset<GameObject>("资源名");
// 生成预制体
Instantiate(obj)
AB包异步加载
//异步加载
//加载AB包资源 用ab变成存储 文件夹里面的要加载的AB包路径
//AB包不能重复加载否则会报错
//一般用携程写,因为需要语法糖yile 来判断是否加载完成 再进行下一步操作
AssetBundleCreateRequest ab= AssetBundle.LoadFromFileAsync("路径");
// 获得AB 包里面的 预制体资源
AssetBundleRequest obj = ab.assetBundle.LoadAssetAsync<GameObject>("包里的资源名");
// 生成预制体
Instantiate(obj.asset as GameObject);
卸载全部AB包
//ture 卸载所有加载的AB以及场景上所有引用的资源会丢失 false 只卸载AB包
// 例如 某UI或模型使用了 AB里的资源贴图 卸载后 会出现 无图片 模型缺少贴图
AssetBundle.UnloadAllAssetBundles(False);
卸载单个AB包
//ture 卸载所有加载的AB以及场景上所有引用的资源会丢失 false 只卸载AB包
// 例如 某UI或模型使用了 AB里的资源贴图 卸载后 会出现 无图片 模型缺少贴图
AB包对象.Unload(false);
//类如 ab.unload(false);
AssetBundelManifest(AB包依赖)
/// 加载总包
AssetBundle AbMain = AssetBundle.LoadFromFile("路径"+ "/总包名");
//获得总包文件信息
//字符串里的"AssetBundleManifest" 是固定的
AssetBundleManifest assetBundleManifest = AbMain.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
//通过AB包名获得所有依赖包名
string[] s = assetBundleManifest.GetAllDependencies("需要查询的包");
AB包资源加载管理器
AB包文件
里面存放的是资源文件
Manifest文件
- AB包文件信息
- 资源信息,依赖关系,版本信息等等
关键AB包(和目录名一样的包)
- 主包
- AB包依赖关键信息


浙公网安备 33010602011771号