/// <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(); } }
/// <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; }
/// <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; }
/// <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)); }
public void LoadScene(string sceneName, LoadCompleteHandler complete = null) { isLoading = true; mLoadingUI.LoadScene(sceneName, complete); }