/// <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>
 /// 获取本类实例
 /// </summary>
 /// <returns></returns>
 public static ABManifestLoader GetInstance()
 {
     if (_Instance == null)
     {
         _Instance = new ABManifestLoader();
     }
     return(_Instance);
 }
        /// <summary>
        /// 加载指定场景,指定包
        /// </summary>
        /// <param name="sceneName">场景名称</param>
        /// <param name="abName">assetBundle 名称</param>
        /// <param name="loadAllCompleteHandle">制定的AB包加载完成之后,执行的方法</param>
        /// <returns></returns>
        public IEnumerator LoadAssetBundlePack(string sceneName, string abName, DelLoadComplete loadAllCompleteHandle)
        {
            if (_Instance == null)
            {
                yield break;
            }
            // 参数检查
            if (string.IsNullOrEmpty(sceneName) || string.IsNullOrEmpty(abName) || loadAllCompleteHandle == null)
            {
                Debug.LogError(GetType() + "/LoadAssetBundlePack()/sceneName or abName or loadAllCompleteHandle =null");
                yield  break;
            }
            if (!abName.Contains("."))
            {
                Debug.LogError(GetType() + "/LoadAssetBundlePack()/ abName需要有后缀的(.ab或.scene)");
            }
            // 规范化参数
            string _CurrentSceneName = sceneName.ToLower();
            string _CurrentAB        = String.Empty;

            if (abName.Contains("/"))
            {
                _CurrentAB = abName.ToLower();
            }
            else
            {
                _CurrentAB = _CurrentSceneName + "/" + abName.ToLower();
            }

            // 等待Manifest清单文件加载完成
            while (!ABManifestLoader.GetInstance().IsLoadFinish)
            {
                yield return(null);
            }
            _ManifestObj = ABManifestLoader.GetInstance().GetABManifest();
            if (_ManifestObj == null)
            {
                Debug.LogError(GetType() + "/LoadAssetBundlePack()/_ManifestObj =null");
                yield break;
            }
            // 把当前场景加入集合
            if (!_DicAllScenes.ContainsKey(_CurrentSceneName))
            {
                MultiABManager multiMgrObj = new MultiABManager(_CurrentSceneName);
                _DicAllScenes.Add(_CurrentSceneName, multiMgrObj);
            }

            // 调用下一层(MultiABManager)
            MultiABManager tmpMultiAbManager = _DicAllScenes[_CurrentSceneName];

            if (tmpMultiAbManager == null)
            {
                Debug.LogError(GetType() + "/LoadAssetBundlePack()/tmpMultiAbManager=null");
                yield break;
            }
            else
            {
                tmpMultiAbManager.SetCurrentABNameAndHandler(_CurrentAB, loadAllCompleteHandle);
                // 调用“多包管理类”来加载指定AB包
                yield return(tmpMultiAbManager.LoadAssetBundle(_CurrentAB));
            }
        }
 void Awake()
 {
     StartCoroutine(ABManifestLoader.GetInstance().LoadManifestFile());
 }