/// <summary> /// 释放当前场景所有资源 /// </summary> /// <param name="sceneName">场景名称</param> public void DisposeAllAssets(string sceneName) { string _CurrentSceneName = sceneName.ToLower(); if (_DicAllScenes.ContainsKey(_CurrentSceneName)) { MultiABManager multiObj = _DicAllScenes[_CurrentSceneName]; multiObj.DisposeAllAsset(); _DicAllScenes.Remove(_CurrentSceneName); } else { Debug.Log(GetType() + "/DisposeAllAssets() sceneName 可能为空"); } }
/// <summary> /// 加载所需资源(泛型) /// </summary> /// <param name="sceneName">场景名称</param> /// <param name="abName">assetBundle 名称</param> /// <param name="assetName">资源名称</param> /// <param name="isCache">是否缓存,当用户加载资源后,自己没有加入缓存,而之后又需要再次使用这个资源,建议 true</param> /// <returns></returns> public T LoadAsset <T>(string sceneName, string abName, string assetName, bool isCache = false) where T : UnityEngine.Object { string _CurrentSceneName = sceneName.ToLower(); string _CurrentAB = String.Empty; string tmpassetName = assetName.ToLower(); if (abName.Contains("/")) { _CurrentAB = abName.ToLower(); } else { _CurrentAB = _CurrentSceneName + "/" + abName.ToLower(); } if (_DicAllScenes.ContainsKey(_CurrentSceneName)) { MultiABManager multiObj = _DicAllScenes[_CurrentSceneName]; return(multiObj.LoadAsset <T>(_CurrentAB, tmpassetName, isCache)); } Debug.LogError(GetType() + "/MyLoadAsset() sceneName 可能为空,或者未使用 LoadAssetBundlePack 提前加载AB包"); return(default(T)); }
/// <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)); } }