public SingleAssetBundleLoader(string abName, ABLoadComplete loadCompleteHandler = null) { this.abName = abName; this.abPath = PathTools.GetUrlPath() + "/" + this.abName; this.loadCompleteHandler = loadCompleteHandler; this.Relation = new ABRelation(abName); }
public SingleABLoader(string abName, ABLoadComplete loadComplete) { assetLoader = null; abLoadCompleteHandler = loadComplete; this.abName = abName; abDownloadPath = PathTools.GetWWWPath() + "/" + abName; }
public MultiABMgr(string sceneName, string abName, ABLoadComplete abLoadComplete) { currentSceneName = sceneName; currentABName = abName; singleABLoaderDict = new Dictionary <string, SingleABLoader>(); abRelationDict = new Dictionary <string, ABRelation>(); loadCompleteHandler = abLoadComplete; }
public IEnumerator LoadAssetBundlePack(string sceneName, string abName, ABLoadComplete loadComplete) { //循环等待manifest加载完成 //TODO 需要优化(加载队列,回调) while (!AssetBundleManifestLoader.GetInstance().IsLoadFinish) { yield return(null); } mainfest = AssetBundleManifestLoader.GetInstance().GetMainfest(); if (!dicAllScenes.ContainsKey(sceneName)) { MultiABManager multiTmpManager = new MultiABManager(abName, loadComplete); dicAllScenes.Add(sceneName, multiTmpManager); } MultiABManager multiManager = dicAllScenes[sceneName]; yield return(multiManager.LoadAssetBundle(abName)); }
/// <summary> /// 释放本场景中所有的资源 /// </summary> public void DisposeAllAsset() { try { foreach (var item in singleABLoaderDict.Values) { item.DisposeAll(); } } finally { singleABLoaderDict.Clear(); singleABLoaderDict = null; abRelationDict.Clear(); abRelationDict = null; currentABName = null; currentSceneName = null; loadCompleteHandler = null; Resources.UnloadUnusedAssets(); System.GC.Collect(); } }
public IEnumerator LoadAssetBundle(string sceneName, string abName, ABLoadComplete abLoadComplete) { // 参数检查 if (string.IsNullOrEmpty(sceneName) || string.IsNullOrEmpty(abName)) { Debug.LogError(GetType() + "/LoadAssetBundle()/sceneName or abName == null,请检查!"); yield return(null); } // 等待Manifest文件加载完成 while (!ABManifestLoader.Instance.IsLoaded) { yield return(null); } manifest = ABManifestLoader.Instance.GetABManifest(); if (manifest == null) { Debug.LogError(GetType() + "/LoadAssetBundle()/manifest == null,请检查!"); yield return(null); } // 加入当前场景 if (!multiABMgrDict.ContainsKey(sceneName)) { MultiABMgr multiABMgr = new MultiABMgr(sceneName, abName, abLoadComplete); multiABMgrDict.Add(sceneName, multiABMgr); } // 调用下一层(多包管理) MultiABMgr tempMultiABMgr = multiABMgrDict[sceneName]; if (tempMultiABMgr == null) { Debug.LogError(GetType() + "/LoadAssetBundle()/tempMultiABMgr == null,请检查!"); } yield return(tempMultiABMgr.LoadAssetBundle(abName)); }
public MultiABManager(string abName, ABLoadComplete loadAllCompleteHandle) { this.curABName = abName; this.loadAllCompleteHandle = loadAllCompleteHandle; this.dicLoadCache = new Dictionary <string, SingleAssetBundleLoader>(); }