IEnumerator DownloadAndCacheAsBinary(string assetBundleName, IProgress <float> progress) { var url = assetBundleUrl + assetBundleName; var getBytes = WebRequestProcedure.GetAndGetBytes(url, headers, progress).ToYieldInstruction(); yield return(getBytes); var hash = Manifest.GetAssetBundleHash(assetBundleName); AssetBundleCache.Save(assetBundleName, hash, getBytes.Result); }
IEnumerator DownloadAndCacheAllDependenciesAsBinary(string assetBundleName, IProgress <float> downloadProgress) { var dependencies = Manifest.GetAllDependencies(assetBundleName); var allAssetBundles = dependencies.Concat(new[] { assetBundleName }); var needDownloads = allAssetBundles.Where(ab => !AssetBundleCache.IsCached(ab, Manifest.GetAssetBundleHash(ab))).ToArray(); var abdProgress = new AssetBundleDownloadProgress(downloadProgress, needDownloads.Length); foreach (var ab in needDownloads) { yield return(DownloadAndCacheAsBinary(ab, abdProgress).ToYieldInstruction()); abdProgress.Next(); } abdProgress.Complete(); }
IEnumerator LoadDependencies(string assetBundleName) { var dependencies = Manifest.GetDirectDependencies(assetBundleName); foreach (var dependency in dependencies) { var download = LoadDependencies(dependency).ToYieldInstruction(); yield return(download); } LoadedAssetBundle loadedAssetBundle; if (loadedAssetBundleMap.TryGetValue(assetBundleName, out loadedAssetBundle)) { loadedAssetBundle.RefCount += 1; yield break; } var loading = AssetBundleCache.Load(assetBundleName).ToYieldInstruction(); yield return(loading); loadedAssetBundleMap.Add(assetBundleName, new LoadedAssetBundle(loading.Result)); }