public IEnumerator LoadAssetBundle(string abName) { //ab包依赖关系的建立 if (!m_relationDict.ContainsKey(abName)) { ABRelation tempRelation = new ABRelation(abName); m_relationDict.Add(abName, tempRelation); } ABRelation abRelation = m_relationDict[abName]; //得到ab包所有的依赖关系(查询清单文件) string[] strDependenceArr = ABManifestLoader.Instance.GetAllDependices(abName); for (int i = 0; i < strDependenceArr.Length; i++) { //添加依赖项 abRelation.AddDependence(strDependenceArr[i]); //添加引用项 yield return(LoadReferenceAB(strDependenceArr[i], abName)); } //加载ab包 if (m_singleABDict.ContainsKey(abName)) { yield return(m_singleABDict[abName].LoadAssetBundle()); } else { m_currentSingleABLoader = new SingleABLoader(abName, CompleteLoadABCallBack); m_singleABDict.Add(abName, m_currentSingleABLoader); yield return(m_currentSingleABLoader.LoadAssetBundle()); } }
//加载AB包 public IEnumerator LoadAssetBundle(string abName) { //AB包关系的建立 if (!dicABRelation.ContainsKey(abName)) { ABRelation aBRelationObj = new ABRelation(abName); dicABRelation.Add(abName, aBRelationObj); } ABRelation tmpABRelation = dicABRelation[abName]; //得到所有的依赖关系 string[] dependencearray = ABManifestLoader.GetInstance().RetrivalDependence(abName); foreach (string item_dependence in dependencearray) { //添加依赖 tmpABRelation.AddDependence(item_dependence); //添加引用 yield return(LoadRefence(item_dependence, abName)); } //加载 if (dicSingleABLoader.ContainsKey(abName)) { yield return(dicSingleABLoader[abName].LoadAssetBundle()); } else { curSingleABLoader = new SingleABLoader(abName, CompleteAB); dicSingleABLoader.Add(abName, curSingleABLoader); yield return(curSingleABLoader.LoadAssetBundle()); } yield return(null); }
/// <summary> /// 加载引用AB包 /// </summary> /// <param name="abName">AB包的名称</param> /// <param name="refABName">被引用AB包的名称</param> /// <returns></returns> private IEnumerator LoadRefence(string abName, string refABName) { if (dicABRelation.ContainsKey(abName)) { ABRelation tmpABRelation = dicABRelation[abName]; tmpABRelation.AddReference(refABName); } else { ABRelation tmpABRelation = new ABRelation(abName); tmpABRelation.AddReference(refABName); dicABRelation.Add(abName, tmpABRelation); //开始加载依赖的包 yield return(LoadAssetBundle(abName)); } yield return(null); }
/// <summary> /// 加载引用ab包 /// </summary> /// <param name="abName">ab包名</param> /// <param name="refName">被引用ab包名称</param> /// <returns></returns> private IEnumerator LoadReferenceAB(string abName, string refName) { //ab包已经被加载 if (m_relationDict.ContainsKey(abName)) { ABRelation tempRelation = m_relationDict[abName]; //添加ab包引用关系 tempRelation.AddReference(refName); } else { ABRelation temp = new ABRelation(abName); temp.AddReference(refName); m_relationDict.Add(abName, temp); //开始加载依赖的包 yield return(LoadAssetBundle(abName)); } }
/// <summary> /// 这是卸载ab包 卸载一个 需要处理其依赖关系 /// </summary> /// <param name="abName"></param> public void DisposeBundle(string abName) { if (m_singleABDict.ContainsKey(abName)) { ABRelation relation = m_relationDict[abName]; List <string> def = relation.GetAllDependence(); for (int i = 0; i < def.Count; i++) { if (m_relationDict.ContainsKey(def[i])) { ABRelation temp = m_relationDict[def[i]]; if (temp.RemoveReference(abName)) { DisposeBundle(temp.GetABName()); } } } if (relation.GetAllReference().Count == 0) { m_singleABDict[abName].Dispose(); m_relationDict.Remove(abName); } } }