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)); }
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); }