/// <summary> /// 构造函数 /// </summary> /// <param name="abName"></param> /// <param name="loadProgress"></param> /// <param name="loadComplete"></param> public SingleABLoader(string abName, DelLoadComplete loadComplete) { _ABName = abName; _LoadCompleteHandle = loadComplete; _ABDownloadPath = PathTools.GetWWWPath() + "/" + _ABName; _AssetLoader = null; }
/// <summary> /// 释放本场景中所有的资源 /// 注意点:用于场景之间的切换 /// </summary> public void DisposeAllAsset() { try { if (_DicSingleABLoaderCache != null && _DicSingleABLoaderCache.Count > 0) { foreach (SingleABLoader singleAbLoader in _DicSingleABLoaderCache.Values) { singleAbLoader.DisposeAll(); } } } catch { Debug.Log(GetType() + "DisposeAllAsset/ 出错"); } finally { _DicSingleABLoaderCache.Clear(); _DicSingleABLoaderCache = null; // 释放其他的资源 _DicABRelation.Clear(); _DicABRelation = null; _CurrentSceneName = null; _CurrentABName = null; _loadAllABPackageCompleteHandle = null; _CurrentSingleABLoader = null; // 卸载没有用到的资源 Resources.UnloadUnusedAssets(); // 强制垃圾收集 System.GC.Collect(); } }
/// <summary> /// 下载AB包 /// </summary> /// <param name="sceneName"></param> /// <param name="abName"></param> /// <param name="delLoadComplete"></param> /// <returns></returns> public IEnumerator LoadAssetBundlePack(string sceneName, string abName, DelLoadComplete delLoadComplete) { if (string.IsNullOrEmpty(sceneName) || string.IsNullOrEmpty(abName)) { Debug.LogError("sceneName 检查+abName 检查"); yield return(null); } while (!ABManifestLoader.GetInstance().IsLoadFinish) { yield return(null); } manifesObj = ABManifestLoader.GetInstance().GetABManifest(); if (manifesObj == null) { Debug.LogError("请先加载清单文件"); yield return(null); } if (!_dicAllScene.ContainsKey(sceneName)) { MultiABMgr multiABMgr = new MultiABMgr(sceneName, abName, delLoadComplete); _dicAllScene.Add(sceneName, multiABMgr); } MultiABMgr tmpmultiABMgr = _dicAllScene[sceneName]; if (tmpmultiABMgr == null) { Debug.LogError("tmpmultiABMgr is null"); } yield return(tmpmultiABMgr.LoadAssetBundle(abName)); }
/// <summary> /// 释放本场景中的所有资源,场景转换调用 /// </summary> public void DisposeAllAsset() { try { foreach (SingleABLoader item in dicSingleABLoader.Values) { item.DisposeAll(); } } finally { dicSingleABLoader.Clear(); dicSingleABLoader = null; dicABRelation.Clear(); dicABRelation = null; curABName = null; curSceneName = null; LoadAllPackageCompleteHandle = null; Resources.UnloadUnusedAssets(); System.GC.Collect(); } }
public void DisposeAllAsset() { try { //逐一释放所有加载过的AB包中资源 foreach (var item in singleABLoaderCache.Values) { item.DisposeAll(); } } finally { singleABLoaderCache.Clear(); singleABLoaderCache = null; //释放其他对象占用资源 abRelation.Clear(); abRelation = null; currentABName = null; currentScenceName = null; LoadALLABPackageCompleteHandel = null; //卸载没有用到的资源 Resources.UnloadUnusedAssets(); //强制垃圾收集 System.GC.Collect(); } }
/// <summary> /// 释放本场景中所有的资源 /// </summary> public void DisposeAllAsset() { try { if (_DicSingleABLoaderCache != null && _DicSingleABLoaderCache.Count != 0) { //逐一释放所有加载过的AssetBundel 包中的资源 foreach (SingleABLoader item_sABLoader in _DicSingleABLoaderCache.Values) { item_sABLoader.DisposeALL(); } _DicSingleABLoaderCache.Clear(); _DicSingleABLoaderCache = null; //释放其他对象占用资源 _DicABRelation.Clear(); _DicABRelation = null; _CurrentABName = null; _CurrentScenesName = null; _LoadAllABPackageCompleteHandel = null; } //卸载没有使用到的资源 Resources.UnloadUnusedAssets(); //强制垃圾收集 System.GC.Collect(); } finally { } }
public MultABMgr(string senceName, string abName, DelLoadComplete loadAllABPackCompleteHandle) { currentScenceName = senceName; currentABName = abName; LoadALLABPackageCompleteHandel = loadAllABPackCompleteHandle; }
/// <summary> /// 释放包中所有加载的资源 (建议场景中切换的时候调用,避免卡顿) /// </summary> public void DisposeAllAsset() { try { // 逐一释放所有加载过的AssetBundle包中的资源 foreach (SingleABLoader item_SABLoader in _DicSingleABLoaderCache.Values) { item_SABLoader.DisposeAll(); } } finally { _DicSingleABLoaderCache.Clear(); _DicSingleABLoaderCache = null; // 释放其他对象占用的资源 _DicABRelation.Clear(); _DicABRelation = null; _CurrentABName = null; _CurrentSceneName = null; _LoadAllABPackageCompleteHandler = null; // 卸载没有使用到的资源 Resources.UnloadUnusedAssets(); // 强制垃圾收集 System.GC.Collect(); } }
/// <summary> /// 释放本场景中所有的资源 /// </summary> public void DisposeAllAsset() { try { foreach (SingleABLoader item_sABLoader in _DicSingleABLoaderCache.Values) { item_sABLoader.DisposAll(); } } finally { _DicSingleABLoaderCache.Clear(); _DicSingleABLoaderCache = null; _DicABRelaton.Clear(); _DicABRelaton = null; _CurrentABName = null; _CurrentSceneName = null; _LoadAllABPackageCompleteHandle = null; Resources.UnloadUnusedAssets(); System.GC.Collect(); } }
public ABLoader(string mABName, DelLoadComplete mLoadCompleteHandle) { this.assetLoader = null; this.abName = mABName; this.abDownLoadPath = FrameWorkConst.GetWWWPath() + "/" + this.abName; this.loadCompleteHandle = mLoadCompleteHandle; }
public MultAB(string mCurrentScenesName, string mAbName, DelLoadComplete mloadAllABPackageComplete) { this.currentScenesName = mCurrentScenesName; this.currentABName = mAbName; this.abLoaderCache = new Dictionary <string, ABLoader>(); this.dicABrelaion = new Dictionary <string, ABrelation>(); this.loadAllABPackageComplete = mloadAllABPackageComplete; }
public MultiABMgr(string sceneName, string abName, DelLoadComplete loadAllABPackageCompleteHandle) { _CurrentSceneName = sceneName; _CurrentABName = abName; _DicSingleABLoaderCache = new Dictionary <string, SingleABLoader>(); _DicABRelaton = new Dictionary <string, ABRelation>(); _LoadAllABPackageCompleteHandle = loadAllABPackageCompleteHandle; }
/// <summary> /// 构造函数 /// </summary> /// <param name="abName"></param> public SingleABLoader(string abName, DelLoadComplete loadComplete) { assetLoader = null; ABName = abName; loadCompleteHandle = loadComplete; ABDownLoadPath = PathTools.GetWWWPath() + "/" + ABName; }
/// <summary> /// 构造函数 /// </summary> /// <param name="sceneName">场景名称</param> /// <param name="abName">Ab包名称</param> /// <param name="onLandCompleteEvent">(委托)是否调用完成</param> public MultiABMgr(string sceneName, string abName, DelLoadComplete onLandCompleteEvent) { //_CurrentSceneName = sceneName; _CurrentABName = abName; _DicSingleABLoaderCache = new Dictionary <string, SingleABLoader>(); _DicABRelating = new Dictionary <string, ABRelating>(); _onLandCompleteEvent = onLandCompleteEvent; }
//构造函数 public SingleABLoader(string abName, DelLoadComplete loadComplete) { _AssetLoader = null; _ABName = abName; _LoadCompleteHandle = loadComplete; _ABDownLoadPath = AssetDefine.GetABOutPath() + "/" + abName; }
public SingleABLoader(string abName, DelLoadComplete loadComplete) { _assetLoader = null; _ABname = abName; // 委托定义 _LoadCompleteHandle = loadComplete; // 下载路径 _ABurl = PathTools.GetABwwwPath() + "/" + _ABname; }
public MultiABMgr(string sceneName, string abName, DelLoadComplete delLoadComplete) { curSceneName = sceneName; curABName = abName; dicSingleABLoader = new Dictionary <string, SingleABLoader>(); dicABRelation = new Dictionary <string, ABRelation>(); LoadAllPackageCompleteHandle = delLoadComplete; }
//构造函数 public SingleABLoader(string abName, DelLoadComplete loadComplete) { _AssetLoader = null; _ABName = abName; //委托初始化 _LoadCompleteHandle = loadComplete; //AB包下载路径(初始化) _ABDownLoadPath = PathTools.GetWWWPath() + "/" + _ABName; }
/// <summary> /// 构造函数 /// </summary> /// <param name="CurrentSceneName">场景名称</param> /// <param name="CurrentABName">Asset Bundle 名称</param> /// <param name="LoadAllABPackageCompleteHandler">委托</param> public MultiABManager(string CurrentSceneName, string CurrentABName, DelLoadComplete LoadAllABPackageCompleteHandler) { _CurrentSceneName = CurrentSceneName; _CurrentABName = CurrentABName; _DicSingleABLoaderCache = new Dictionary <string, SingleABLoader>(); _DicABRelation = new Dictionary <string, ABRelation>(); _LoadAllABPackageCompleteHandler = LoadAllABPackageCompleteHandler; }
/// <summary> /// 构造函数 /// </summary> /// <param name="ABName">AB包名</param> /// <param name="loadComplete">委托</param> public SingleABLoader(string ABName, DelLoadComplete loadComplete) { _AssetLoader = null; _ABName = ABName; // 委托定义 _LoadCompleteHandler = loadComplete; //AB包下载路径 _ABDownLoadPath = PathTools.GetWWWAssetBundlePath() + "/" + _ABName; }
/// <summary> /// 释放当前 AB 包的 内存镜像 (基于WWW类下载)以及 内存对象 /// </summary> public void DisposeAll() { if (_assetLoader == null) { Debug.LogError(GetType() + "/DisposeAll() /_assetLoader 为null"); } else { _assetLoader.DisposeAll(); _assetLoader = null; _LoadCompleteHandle = null; _ABname = null; _ABurl = null; } }
/// <summary> /// 下载 指定 AssetBundle 包 /// </summary> /// <param name="sceneName"></param> /// <param name="abName"></param> /// <param name="loadAllComplete"></param> /// <returns></returns> public IEnumerator LoadAssetBundlePack(string sceneName, string abName, DelLoadComplete loadAllComplete) { // 参数检查 if (string.IsNullOrEmpty(sceneName) == true || string.IsNullOrEmpty(abName) == true) { Debug.LogError(GetType() + "/LoadAssetBundlePack()/sceneName or is null,请检查"); yield return(null); } // 等待 Manifest 清单文件加载完成 while (ABManifestLoader.GetInstance().IsLoadFinished == false) { yield return(null); } _ManifestObj = ABManifestLoader.GetInstance().GetABManifest(); if (_ManifestObj == null) { Debug.LogError(GetType() + "/LoadAssetBundlePack()/_ManifestObj is null,请先确保加载 Manifest 清单文件"); yield return(null); } if (_DicAllScenes.ContainsKey(sceneName) == false) { MultiABManager multiABManagerObj = new MultiABManager(sceneName, abName, loadAllComplete); _DicAllScenes.Add(sceneName, multiABManagerObj); } // 多包管理类 MultiABManager tmpMultiABMgrObj = _DicAllScenes[sceneName]; if (tmpMultiABMgrObj == null) { Debug.LogError(GetType() + "/LoadAssetBundlePack()/tmpMultiABMgrObj is null,请检查"); } yield return(tmpMultiABMgrObj.LoadAssetBundle(abName)); }
/// <summary> /// 下载AssetBundel 指定包 /// </summary> /// <param name="scenesName">场景名称</param> /// <param name="abName">AssetBundle 包名称</param> /// <param name="loadAllCompleteHandle">委托: 调用是否完成</param> /// <returns></returns> public IEnumerator LoadAssetBundlePack(string scenesName, string abName, DelLoadComplete loadAllCompleteHandle) { //参数检查 if (string.IsNullOrEmpty(scenesName) || string.IsNullOrEmpty(abName)) { Debug.LogError(GetType() + "/LoadAssetBundlePack()/ScenesName Or abName is null ,请检查!"); //yield return null;//类似于C#中的 continue 。 作用是跳过当前“帧” yield break; //类似于C# 中 return null; } //等待Manifest清单文件加载完成 while (!ABManifestLoader.GetInstance().IsLoadFinish) { yield return(null); } _ManifestObj = ABManifestLoader.GetInstance().GetABManifest(); if (_ManifestObj == null) { Debug.LogError(GetType() + "/LoadAssetBundlePack()/_ManifestObj is null ,请先确保加载Manifest清单文件!"); //yield return null; yield break; } //把当前场景加入集合中。 if (!_DicAllScenes.ContainsKey(scenesName)) { MultiABMgr multiMgrObj = new MultiABMgr(scenesName, abName, loadAllCompleteHandle); _DicAllScenes.Add(scenesName, multiMgrObj); } //调用下一层(“多包管理类”) MultiABMgr tmpMultiMgrObj = _DicAllScenes[scenesName]; if (tmpMultiMgrObj == null) { Debug.LogError(GetType() + "/LoadAssetBundlePack()/tmpMultiMgrObj is null ,请检查!"); } //调用“多包管理类”的加载指定AB包。 yield return(tmpMultiMgrObj.LoadAssetBundeler(abName)); }//Method_end
/// <summary> /// 下载AssetBundle指定包 /// </summary> /// <param name="sceneName">场景名称</param> /// <param name="abName">AssetBundle包名称</param> /// <param name="loadAllCompleteHandle">完成回调</param> /// <returns></returns> public IEnumerator LoadAssetBundlePack(string sceneName, string abName, DelLoadComplete loadAllCompleteHandle) { if (string.IsNullOrEmpty(sceneName) || string.IsNullOrEmpty(abName)) { Debug.LogError("sceneName:" + sceneName + ", abName:" + abName); yield break; } while (!ABManifestLoader.GetInstance().IsLoadFinish) { yield return(null); } _ManifestObj = ABManifestLoader.GetInstance().GetABManifest(); if (_ManifestObj == null) { Debug.LogError("_ManifestObj == null"); yield break; } //把当前场景加入集合中 if (!_DicAllScene.ContainsKey(sceneName)) { MultiABMgr multiABMgrObj = new MultiABMgr(sceneName, abName, loadAllCompleteHandle); _DicAllScene.Add(sceneName, multiABMgrObj); } //调用 多包管理类 MultiABMgr tmpMultiABMgrObj = _DicAllScene[sceneName]; if (tmpMultiABMgrObj == null) { Debug.LogError("tmpMultiABMgrObj == null"); yield break; } //加载指定AB包 yield return(tmpMultiABMgrObj.LoadAssetBundle(abName)); }
//释放本场景中所有资源 public void DisposeAllAsset() { try{ foreach (ABLoader item in this.abLoaderCache.Values) { item.DisposeAll(); } } finally{ this.abLoaderCache.Clear(); this.abLoaderCache = null; //释放其他对象占用资源 this.dicABrelaion.Clear(); this.dicABrelaion = null; this.loadAllABPackageComplete = null; this.currentABName = null; this.currentScenesName = null; //卸载没有使用到的资源 Resources.UnloadUnusedAssets(); //强制垃圾收集 System.GC.Collect(); } }
public IEnumerator LoadAB(string sencesName, string abName, DelLoadComplete loadAllCompleteHandle) { //参数检查 if (string.IsNullOrEmpty(sencesName) || string.IsNullOrEmpty(abName)) { Debug.LogError(GetType() + "/LoadAB()/sencesName or abName==null,please check!"); } //等待Manifest清单文件加载完成 while (!ABManifestLoader.Instance.isLoadFinish) { yield return(null); } manifest = ABManifestLoader.Instance.GetABManifest(); if (manifest == null) { Debug.LogError(GetType() + "/LoadAB()/manifest==null,please check!"); yield return(null); } MultABMgr multABMgr; //把当前场景加入到集合中 if (!allScenes.ContainsKey(sencesName)) { multABMgr = new MultABMgr(sencesName, abName, loadAllCompleteHandle); allScenes.Add(sencesName, multABMgr); } //调用下一层(多包管理员) multABMgr = allScenes[sencesName]; if (multABMgr == null) { Debug.LogError(GetType() + "/LoadAB()/multABMgr==null,please check!"); } //调用多包管理类的加载指定AB包 yield return(multABMgr.LoadAB(abName)); }
/// <summary> /// 下载AssetBundle指定包 /// </summary> /// <param name="sceneName">场景名称</param> /// <param name="abName">AssetBundle名称</param> /// <param name="loadAllABCompleteHandle">AssetBundle名称</param> public IEnumerator LoadAssetBundlePackage(string sceneName, string abName, DelLoadComplete loadAllABCompleteHandle) { //参数检查 if (string.IsNullOrEmpty(sceneName) || string.IsNullOrEmpty(abName)) { Debug.LogError(GetType() + "/LoadAssetBundlePackage()/scenenName Or abName is Null ,请检查!"); yield return(null); } //等待Manifest清单加载完成 while (!ABManifestLoader.GetInstance().IsLoadFinish) { yield return(null); } //获取“AssetBundle(清单文件)系统类” _ManifestObj = ABManifestLoader.GetInstance().GetABManifest(); //参数检查 if (_ManifestObj == null) { Debug.LogError(GetType() + "/LoadAssetBundlePackage()/_ManifestObj==null,请先确保加载Manifest清单文件!"); yield return(null); } //如果不包含指定场景,则先创建 if (!_DicAllScenes.ContainsKey(sceneName)) { CreateScenesAB(sceneName, abName, loadAllABCompleteHandle); } //调用下一层(“多AssetBundle管理”类) MultiABMgr tmpMultiABMgrObj = _DicAllScenes[sceneName]; if (tmpMultiABMgrObj == null) { Debug.LogError(GetType() + "/LoadAssetBundlePackage()/tmpMultiABMgrObj==null , 请检查!"); } yield return(tmpMultiABMgrObj.LoadAssetBundles(abName)); }
//下载AssetBundle包 public IEnumerator loadAssetBundlePack(string scenesName, string abName, DelLoadComplete loadAllComplete) { //参数检查 if (string.IsNullOrEmpty(scenesName) || string.IsNullOrEmpty(abName)) { Debug.LogError("scenesName为空,abName为空"); yield return(null); } //等待manifest加载完成 while (!ABManifestLoader.Instance.IsLoadFinish) { yield return(null); } this.manifestObj = ABManifestLoader.Instance.GetManifestObj(); if (this.manifestObj == null) { Debug.LogError("manifestObj为空,请检查"); yield return(null); } //把当前场景加入集合中 if (!this.dicAllScenes.ContainsKey(scenesName)) { MultAB multABObj = new MultAB(scenesName, abName, loadAllComplete); this.dicAllScenes.Add(scenesName, multABObj); } //调用下一层 MultAB tempMultABObj = this.dicAllScenes[scenesName]; if (tempMultABObj == null) { Debug.LogError("tempMultABObj为空,请检查"); yield return(null); } //调用多包管理类 yield return(tempMultABObj.LoadAssetBundeler(scenesName + "/" + abName)); }
/// <summary> /// 加载指定场景,指定包 /// </summary> /// <param name="sceneName">场景名称</param> /// <param name="abName">assetBundle 名称</param> /// <param name="loadAllCompleteHandle">制定的AB包加载完成之后,执行的方法</param> /// <returns></returns> public IEnumerator LoadAssetBundlePack(string sceneName, string abName, DelLoadComplete loadAllCompleteHandle) { if (_Instance == null) { yield break; } // 参数检查 if (string.IsNullOrEmpty(sceneName) || string.IsNullOrEmpty(abName) || loadAllCompleteHandle == null) { Debug.LogError(GetType() + "/LoadAssetBundlePack()/sceneName or abName or loadAllCompleteHandle =null"); yield break; } if (!abName.Contains(".")) { Debug.LogError(GetType() + "/LoadAssetBundlePack()/ abName需要有后缀的(.ab或.scene)"); } // 规范化参数 string _CurrentSceneName = sceneName.ToLower(); string _CurrentAB = String.Empty; if (abName.Contains("/")) { _CurrentAB = abName.ToLower(); } else { _CurrentAB = _CurrentSceneName + "/" + abName.ToLower(); } // 等待Manifest清单文件加载完成 while (!ABManifestLoader.GetInstance().IsLoadFinish) { yield return(null); } _ManifestObj = ABManifestLoader.GetInstance().GetABManifest(); if (_ManifestObj == null) { Debug.LogError(GetType() + "/LoadAssetBundlePack()/_ManifestObj =null"); yield break; } // 把当前场景加入集合 if (!_DicAllScenes.ContainsKey(_CurrentSceneName)) { MultiABManager multiMgrObj = new MultiABManager(_CurrentSceneName); _DicAllScenes.Add(_CurrentSceneName, multiMgrObj); } // 调用下一层(MultiABManager) MultiABManager tmpMultiAbManager = _DicAllScenes[_CurrentSceneName]; if (tmpMultiAbManager == null) { Debug.LogError(GetType() + "/LoadAssetBundlePack()/tmpMultiAbManager=null"); yield break; } else { tmpMultiAbManager.SetCurrentABNameAndHandler(_CurrentAB, loadAllCompleteHandle); // 调用“多包管理类”来加载指定AB包 yield return(tmpMultiAbManager.LoadAssetBundle(_CurrentAB)); } }
/// <summary> /// 下载AssetBundel 指定包(可以供lua调用使用) /// </summary> /// <param name="scenesName">场景名称</param> /// <param name="abName">AssetBundle 包名称</param> /// <param name="loadAllCompleteHandle">委托: 调用是否完成</param> public void LoadAssetBundlePackage(string scenesName, string abName, DelLoadComplete loadAllCompleteHandle) { StartCoroutine(LoadAssetBundlePack(scenesName, abName, loadAllCompleteHandle)); }