/// <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;
        }
Beispiel #4
0
        /// <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));
        }