IEnumerator CoLoadBundleAsync <T>(string assetName, string bundleName, E_LoadAsset eloadAsset, System.Action <T> callback)
            where T : IAssetGetter, new()
        {
            AssetBundle              bundle       = null;
            BundleHolder             bundleHolder = null;
            AssetBundleCreateRequest bundleRequest;
            // 没有加载过bundle
            string bundlePath;

            if (!bundleHolders.TryGetValue(bundleName, out bundleHolder))
            {
                bundlePath = GetBundlePath(bundleName);
                //bundleRequest = AssetBundle.LoadFromFileAsync(Path.Combine(bundleRootPath, bundleName));
                bundleRequest = AssetBundle.LoadFromFileAsync(bundlePath);
                while (!bundleRequest.isDone)
                {
                    yield return(bundleRequest);
                }

                //存bundleHolder
                bundle       = bundleRequest.assetBundle;
                bundleHolder = new BundleHolder(bundle);
                bundleHolder.AddRefence(assetName);
                //Debug.LogError(Time.realtimeSinceStartup + " " + bundleName + " " + assetName);
                bundleHolders.Add(bundleName, bundleHolder);
            }
            else
            {
                bundleHolder.AddRefence(assetName);
                bundle = bundleHolder.Get();
            }

            // 加载依赖的bundle
            string[] dependencies = manifest.GetAllDependencies(bundleName);
            for (int i = 0, iMax = dependencies.Length; i < iMax; ++i)
            {
                BundleHolder dependBundleHolder = null;
                if (bundleHolders.TryGetValue(dependencies[i], out dependBundleHolder))
                {
                    //已经存在的bundle只增加引用
                    dependBundleHolder.AddRefence(assetName);
                    continue;
                }
                //没加载过的
                AssetBundle dependBundle = null;
                bundlePath    = GetBundlePath(dependencies[i]);
                bundleRequest = AssetBundle.LoadFromFileAsync(bundlePath);
                while (!bundleRequest.isDone)
                {
                    yield return(bundleRequest);
                }
                dependBundle       = bundleRequest.assetBundle;
                dependBundleHolder = new BundleHolder(dependBundle);
                dependBundleHolder.AddRefence(assetName);
                //存bundleHolder
                bundleHolders.Add(dependencies[i], dependBundleHolder);
            }

            yield return(CoLoadAssetAsync <T>(bundle, assetName, eloadAsset, callback));
        }
Beispiel #2
0
        AssetBundle LoadBundle(string assetName, string bundleName)
        {
            AssetBundle  bundle       = null;
            BundleHolder bundleHolder = null;
            // 没有加载过bundle
            string bundlePath = GetBundlePath(bundleName);

            if (!bundleHolders.TryGetValue(bundleName, out bundleHolder))
            {
                //Debug.LogError("LoadFromFile [" + bundlePath + "]");
                bundle = AssetBundle.LoadFromFile(bundlePath);
                //存bundleHolder
                bundleHolder = new BundleHolder(bundle);
                bundleHolder.AddRefence(assetName);
                bundleHolders.Add(bundleName, bundleHolder);
            }
            else
            {
                bundleHolder.AddRefence(assetName);
                bundle = bundleHolder.Get();
            }

            // 加载依赖的bundle
            string [] dependencies = manifest.GetAllDependencies(bundleName);
            for (int i = 0, iMax = dependencies.Length; i < iMax; ++i)
            {
                BundleHolder dependBundleHolder = null;
                if (bundleHolders.TryGetValue(dependencies[i], out dependBundleHolder))
                {
                    //已经存在的bundle只增加引用
                    dependBundleHolder.AddRefence(assetName);
                    continue;
                }
                //没加载过的
                bundlePath = GetBundlePath(dependencies[i]);
                //AssetBundle dependBundle = AssetBundle.LoadFromFile(Path.Combine(bundleRootPath, dependencies[i]));
                AssetBundle dependBundle = AssetBundle.LoadFromFile(bundlePath);
                dependBundleHolder = new BundleHolder(dependBundle);
                dependBundleHolder.AddRefence(assetName);
                //存bundleHolder
                bundleHolders.Add(dependencies[i], dependBundleHolder);
            }

            return(bundle);
        }