예제 #1
0
        /// <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));
            }
        }
예제 #2
0
        /// <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());
            }
        }