/// <summary> /// 释放所有资源及AB包内存镜像 /// </summary> public void DisposeAllAsset() { try { foreach (SingleABLoader_2 item in _singleABDict.Values) { item.DisposeAll(); } } finally { _singleABDict.Clear(); _singleABDict = null; //释放其他对象占用资源 _abRelationDict.Clear(); _abRelationDict = null; _currentABName = null; _curFirstDirName = null; _curSingleAB = null; loadAllABCompleteHandle = null; //卸载没有使用的资源 Resources.UnloadUnusedAssets(); //垃圾收集 System.GC.Collect(); } }
/// <summary> /// 加载AB包 /// </summary> public IEnumerator LoadAssetBundle(string abName) { //判断AB包关系类是否已存在 if (!_abRelationDict.ContainsKey(abName)) { //创建和AB包名对应的AB包关系类加入字典 ABRelation relation = new ABRelation(abName); _abRelationDict.Add(abName, relation); } //获取对应的关系类 ABRelation tempRelation = _abRelationDict[abName]; //得到指定AB包的所有依赖关系(查询清单文件) string[] dependenceArray = FrameworkEntry.ABManifestLoader.RetrivalDependece(abName); foreach (string itemDependence in dependenceArray) { //添加依赖项 tempRelation.AddDependence(itemDependence); //加载它依赖的包 yield return(LoadDependence(itemDependence, abName)); } //是否已经加载过 if (_singleABDict.ContainsKey(abName)) { yield return(_singleABDict[abName].LoadAssetBundle()); } else { //未加载过,创建对应的单包加载类对象 _curSingleAB = new SingleABLoader_2(_curFirstDirName, abName, CompleteLoadAB); _singleABDict.Add(abName, _curSingleAB); yield return(_curSingleAB.LoadAssetBundle()); } }