/// <summary>
        /// 加载 AB 包
        /// </summary>
        /// <param name="abName">AB包名称</param>
        /// <returns></returns>
        public IEnumerator LoadAssetBundle(string abName)
        {
            // AB包关系的建立
            if (!_DicABRelation.ContainsKey(abName))
            {
                ABRelation tmpABrelation = new ABRelation(abName);
                _DicABRelation.Add(abName, tmpABrelation);
            }
            ABRelation abRelation = _DicABRelation[abName];

            // 得到指定AB包的依赖引用关系
            string[] strDenendence = ABManifestLoader.GetInstance().RetrivalDependce(abName);
            // 相同的包名在添加 依赖和引用项时 内部会做一个判断:查看是否添加过,添加过就不再添加了
            foreach (string item in strDenendence)
            {
                // 添加 “依赖项”
                abRelation.AddDenpendce(item);
                // 添加 “引用项”
                yield return(LoadReference(item, abName));
            }
            //加载AB包
            if (!_DicSingleABLoaderCache.ContainsKey(abName))
            {
                _CurrentSingleABLoader = new SingleABLoader(abName, CompleteLoadAB);
                _DicSingleABLoaderCache.Add(abName, _CurrentSingleABLoader);
                yield return(_DicSingleABLoaderCache[abName].LoadAssetBundle());
            }
        }
 /// <summary>
 /// 添加引用项
 /// 作用:当两个包相互依赖时,光靠依赖关系,无法终止遍历,
 /// 这里通过增加引用关系,来终止死循环。
 /// 例如:A、B两包, A包先加载,添加B包为依赖项,B包将A包添加为引用项,然后加载B包
 /// 此时,B包添加A包为依赖项,并且A包添加B包为引用项,由于A包已经添加过引用关系,所以不再加载B包,从而避免了循环
 /// 总结:实际上,只需要一个有包名的列表就可以了,加载过的包名不在加载,就可以了,这里的引用的依赖包关系,没有用到
 /// </summary>
 private IEnumerator LoadReference(string abName, string refAbName)
 {
     // 表示: 该 AB 包的引用包,已经加载过了,就不在加载,只需要添加到引用关系中
     if (_DicABRelation.ContainsKey(abName))
     {
         ABRelation tmpABRelation = _DicABRelation[abName];
         // 添加 AB 包的引用关系
         tmpABRelation.AddReference(refAbName);
     }
     else
     {
         ABRelation tmpABRelation = new ABRelation(abName);
         tmpABRelation.AddReference(refAbName);
         _DicABRelation.Add(abName, tmpABRelation);
         yield return(LoadAssetBundle(abName));
     }
 }