/// <summary> /// 释放本场景中所有的资源 场景转换使用 /// </summary> public void DisPoseAllAsset() { //逐一释放所有加载过的AB包资源 try { foreach (SingleABLoader item_sABLoader in _DicSingleABLoaderCache.Values) { item_sABLoader.DisposeAll(); } } finally { _DicSingleABLoaderCache.Clear(); _DicSingleABLoaderCache = null; //释放其他对象占用资源 _DicABRelation.Clear(); _DicABRelation = null; _CurrentSceneName = null; _CurrntABName = null; _LoadAllABPackageCompleteHandle = null; //卸载未使用的资源 Resources.UnloadUnusedAssets(); //强制回收 System.GC.Collect(); } }
/// <summary> /// 构造函数 /// </summary> /// <param name="abName"></param> public SingleABLoader(string abName, DeLoadComplete loadComplete) { _ABLoader = null; this._ABName = abName; //委托初始化 _LoadCompleteHandle = loadComplete; //AB包下载路径 _ABDownLoadPath = PathTools.GetWWWPath() + "/" + _ABName; }
public MultiABMgr(string sceneName, string abName, DeLoadComplete loadAllABPackageCompleteHandle) { _CurrentSceneName = sceneName; _CurrntABName = abName; _DicSingleABLoaderCache = new Dictionary <string, SingleABLoader>(); _DicABRelation = new Dictionary <string, ABRelation>(); _LoadAllABPackageCompleteHandle = loadAllABPackageCompleteHandle; }
/// <summary> /// 下载AB指定包 /// </summary> /// <param name="scenesName"></param> /// <param name="abName"></param> /// <param name="loadAllCompleteHandle">调用是否完成</param> /// <returns></returns> public IEnumerator LoadAssetBundlePack(string scenesName, string abName, DeLoadComplete loadAllCompleteHandle) { //参数检查 if (string.IsNullOrEmpty(scenesName) || string.IsNullOrEmpty(abName)) { Debug.LogError("LoadAssetBundlePack方法加载错误,场景名或AB包名称错误"); yield return(null); } //等待manifest 清单文件加载完成 while (!ABMainfestLoader.GetInstance().IsLoadCompleted) { yield return(null); } _ManifestObj = ABMainfestLoader.GetInstance().GetABManifest(); if (_ManifestObj == null) { Debug.LogError("LoadAssetBundlePack方法加载错误,_ManifestObj为空"); yield return(null); } //当前场景加入集合 if (!_DicAllScenes.ContainsKey(scenesName)) { MultiABMgr multiObj = new MultiABMgr(scenesName, abName, loadAllCompleteHandle); _DicAllScenes.Add(scenesName, multiObj); } //调用下一层 多包管理类 MultiABMgr tmpMultiObj = _DicAllScenes[scenesName]; if (tmpMultiObj == null) { Debug.LogError("LoadAssetBundlePack方法加载错误,tmpMultiObj为空"); } //调用多包管理类 加载指定AB包 yield return(tmpMultiObj.LoadAssetBundle(abName)); }