예제 #1
0
        /// <summary>
        /// 释放本场景中所有的资源(建议仅在场景转换中使用)
        /// </summary>
        public void DisposeAllAssets()
        {
            try
            {
                //逐一释放所有加载过的AssetBundle包中的资源
                foreach (SingleABLoader loader in loaderCacheDict.Values)
                {
                    loader.DisposeAll();
                }
            }
            finally
            {
                loaderCacheDict.Clear();
                loaderCacheDict = null;

                //释放其他对象占用资源
                relationDict.Clear();
                relationDict         = null;
                currentSceneName     = null;
                label                = null;
                _LoadCompleteHandler = null;

                //卸载没有使用到的资源
                Resources.UnloadUnusedAssets();

                //立即执行垃圾回收
                System.GC.Collect();
            }
        }
예제 #2
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="name">AB包名</param>
 public SingleABLoader(string label, LoadCompleteHandler _LoadCompleteHandler)
 {
     this._AssetLoader = null;
     this.label        = label;
     //委托初始化
     this._LoadCompleteHandler = _LoadCompleteHandler;
     //AB包下载路径初始化
     this.downloadPath = PathTool.GetWWWPath() + "/" + label;
 }
예제 #3
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="sceneName">场景名称</param>
        /// <param name="label">AB包名</param>
        /// <param name="_LoadCompleteHandler">(委托)是否调用完成</param>
        public MultiABManager(string sceneName, string label, LoadCompleteHandler _LoadCompleteHandler)
        {
            loaderCacheDict = new Dictionary <string, SingleABLoader>();
            relationDict    = new Dictionary <string, Relation>();

            this.currentSceneName     = sceneName;
            this.label                = label;
            this._LoadCompleteHandler = _LoadCompleteHandler;
        }
예제 #4
0
        /// <summary>
        /// 下载AssetBundle指定包
        /// </summary>
        /// <param name="sceneName">场景名称</param>
        /// <param name="label">AB包名</param>
        /// <param name="_LoadCompleteHandler">委托:调用是否完成</param>
        public IEnumerator LoadAssetBundlePackage(string sceneName, string label, LoadCompleteHandler _LoadCompleteHandler)
        {
            //参数检查
            if (string.IsNullOrEmpty(sceneName) || string.IsNullOrEmpty(label))
            {
                Debug.LogError(GetType() + "/LoadAssetBundlePackage/ sceneName or label is null, 请检查!");
                yield return(null);
            }

            //等待Manifest清单文件加载完成
            while (!ManifestLoader.Instance.IsLoaded)
            {
                yield return(null);
            }
            manifest = ManifestLoader.Instance.GetManifest();

            if (manifest == null)
            {
                Debug.LogError(GetType() + "/LoadAssetBundlePackage/ manifest is null, 请检查!");
                yield return(null);
            }

            //把当前场景加入集合中
            MultiABManager multiABMgr = null;

            if (!allScenesDict.ContainsKey(sceneName))
            {
                multiABMgr = new MultiABManager(sceneName, label, _LoadCompleteHandler);
                allScenesDict.Add(sceneName, multiABMgr);
            }

            //调用下一层(“多包管理类”)
            multiABMgr = allScenesDict[sceneName];
            if (multiABMgr == null)
            {
                Debug.LogError(GetType() + "/LoadAssetBundlePackage()/ mutiABMgr is null, 请检查!");
            }
            //调用“多包管理类”的加载指定AB包
            yield return(multiABMgr.LoadAssetBundle(label));
        }
예제 #5
0
 public void LoadScene(string sceneName, LoadCompleteHandler complete = null)
 {
     isLoading = true;
     mLoadingUI.LoadScene(sceneName, complete);
 }