此文为热更新学习笔记记录
# AB 包
- LZ4 比标准压缩程度小,但对于内存的占用相对较小,在使用时无需全部解压(推荐使用)
- ETI 在资源包中不包含资源的类型信息
- FR 重新打包时需要重新构建包和 ClearFolders 不同,它不会删除不存在的包。
- ITTC 增量构建检查时,忽略类型数的更改
- Append Hash 将文件哈希值附加到资源包名上
- SM 严格模式,如果打包出错,则打包直接失败
- DRB 运行时构建
# 打包
进过 AB 打包后,我们发现生成了如下的文件:
其中包含我们的主包文件 PC 和我们的资源包文件 model。
打包完成的资源包以二进制存储
manifest 文件为对应资源的配置文件。
# 加载资源
// 加载 AB 包 | |
var ab= AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/model"); | |
// 加载资源 | |
var asset= ab.LoadAsset<GameObject>("Cube"); | |
Instantiate(asset); | |
// 注意 Ab 包不能重复加载(否则会出错) |
# 异步加载资源
/// <summary> | |
/// 异步加载资源 | |
/// </summary> | |
/// <param name="abName"></param> | |
/// <param name="resName"></param> | |
/// <param name="callBack"></param> | |
/// <typeparam name="T"></typeparam> | |
/// <returns></returns> | |
IEnumerator LoadAbResAsync<T>(string abName, string resName, UnityAction<AssetBundleRequest> callBack) | |
{ | |
var ab = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + "/model"); | |
yield return ab; | |
var res = ab.assetBundle.LoadAssetAsync<T>(resName); | |
yield return res; | |
callBack.Invoke(res); | |
// 卸载单个 ab 包 | |
ab.assetBundle.Unload(false); | |
// 卸载所有 Ab 包,选 true 会删除场景上通过 ab 包加载的资源 | |
AssetBundle.UnloadAllAssetBundles(false); | |
} |
// 异步加载 | |
StartCoroutine(LoadAbResAsync<GameObject>("model", "Cube", a => | |
{ | |
Debug.Log("资源加载完成!"); | |
Instantiate(a.asset); | |
})); |
# 资源依赖
如果一个资源被打包为 ab 包,那么这个资源使用的其他资源依赖会被默认打入资源包。