此文為熱更新學習筆記記錄
AB包
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SM5YWYxQGN4IDMlVjZwITOihDNxY2YzUGZjlzNzYWYi9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 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包,那麼這個資源使用的其他資源依賴會被預設打入資源包。