Esempio n. 1
0
        private IEnumerator LoadBundleIEn(string bundleName, Action <bool, string> loadCallback)
        {
            //等待主Manifest清单文件加载完成
            while (!ABManifestLoader.Instance.IsLoadFinish)
            {
                yield return(null);
            }

            AssetBundleItem bundleItem = _AssetBundlePool.GetBundleItem(bundleName);

            // 检查是否已加载
            if (_AssetBundlePool.BundleIsLoaded(bundleName))
            {
                loadCallback(true, bundleName);
            }
            // 检查是否加载中
            else if (bundleItem != null && bundleItem.BundleLoadStatus == BundleLoadStatus.LOADING)
            {
                bundleItem.LoadCallback += loadCallback;
            }
            else
            {
                if (bundleItem == null)
                {
                    bundleItem = _AssetBundlePool.AddBundleItem(bundleName, loadCallback);
                }
                else
                {
                    bundleItem.LoadCallback += loadCallback;
                }
                bundleItem.BundleLoadStatus = BundleLoadStatus.LOADING;

                string[] strDependeceArray = ABManifestLoader.Instance.GetAssetBundleDependce(bundleItem.BundleName);
                foreach (var depend in strDependeceArray)
                {
                    // 添加依赖项
                    bundleItem.abRelation.AddDependence(depend);
                    // 先加载所有依赖的AB包并设置被依赖关系
                    yield return(LoadReference(depend, bundleItem));
                }

                // 真正加载AB包
                yield return(bundleItem.LoadAssetBundle());
            }
        }