/// <summary> /// 加载被引用AB包 /// </summary> private IEnumerator LoadReference(string abName, string refABName) { if (abRelationDict.ContainsKey(abName)) { ABRelation tempABRelation = abRelationDict[abName]; // 添加AB包被引用关系(被依赖) tempABRelation.AddReference(refABName); } else { ABRelation tempABRelation = new ABRelation(abName); tempABRelation.AddReference(refABName); abRelationDict.Add(abName, tempABRelation); // 开始加载依赖的包 yield return(LoadAssetBundle(abName)); } }
/// <summary> /// 加载AB包 /// </summary> public IEnumerator LoadAssetBundle(string abName) { // AB包关系的建立 if (!abRelationDict.ContainsKey(abName)) { ABRelation abRelation = new ABRelation(abName); abRelationDict.Add(abName, abRelation); } ABRelation tempABRelation = abRelationDict[abName]; // 得到指定AB包所有的依赖关系(查询manifest文件) string[] abDependencyArr = ABManifestLoader.Instance.GetAllDependency(abName); foreach (var item in abDependencyArr) { Debug.Log("abName: " + abName + ", depenABName: " + item); // 添加依赖项 tempABRelation.AddDependency(item); // 添加被引用项 yield return(LoadReference(item, abName)); } //Debug.Log(tempABRelation.GetAllDependency()); //Debug.Log(tempABRelation.GetAllReference()); // 真正加载AB包 if (singleABLoaderDict.ContainsKey(abName)) { yield return(singleABLoaderDict[abName].LoadAssetBundle()); } else { singleABLoader = new SingleABLoader(abName, LoadABCompleted); singleABLoaderDict.Add(abName, singleABLoader); yield return(singleABLoader.LoadAssetBundle()); } }