天天看點

Unity 熱更新初步

此文為熱更新學習筆記記錄

AB包

Unity 熱更新初步
Unity 熱更新初步
  • LZ4 比标準壓縮程度小,但對于記憶體的占用相對較小,在使用時無需全部解壓(推薦使用)
  • ETI 在資源包中不包含資源的類型資訊
  • FR 重新打包時需要重新建構包和ClearFolders不同,它不會删除不存在的包。
  • ITTC 增量建構檢查時,忽略類型數的更改
  • Append Hash 将檔案哈希值附加到資源包名上
  • SM 嚴格模式,如果打包出錯,則打包直接失敗
  • DRB 運作時建構

打包

進過AB打包後,我們發現生成了如下的檔案:

Unity 熱更新初步

其中包含我們的主封包件PC和我們的資源封包件model。

打包完成的資源包以二進制存儲

manifest檔案為對應資源的配置檔案。

Unity 熱更新初步

加載資源

//加載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包,那麼這個資源使用的其他資源依賴會被預設打入資源包。