protected IObservable <T> GetBundleFromStreamingAssets <T>(BundleRequest bundleNeeded) where T : UnityEngine.Object { Debug.Log(("AssetBundleLoader: Using StreamingAssets - " + " Requesting:" + bundleNeeded.AssetCategory + " | " + bundleNeeded.BundleName).Colored(Colors.aqua)); string path = Path.Combine(Application.streamingAssetsPath, bundleNeeded.AssetPathFromLocalStreamingAssets); return(Observable.FromCoroutine <T>((observer, cancellationToken) => RunAssetBundleCreateRequestOperation <T>(AssetBundle.LoadFromFileAsync(path), bundleNeeded, observer, cancellationToken))); }
protected IObservable <T> ProcessDownloadedBundle <T>(BundleRequest bundleNeeded, LoadedBundle bundle) where T : UnityEngine.Object { if (!downloadedBundles.ContainsKey(bundleNeeded.BundleName)) { downloadedBundles.Add(bundleNeeded.BundleName, bundle); } return(bundle.LoadAssetAsync <T>(bundleNeeded.AssetName)); }
protected void LoadGameBundle() { BundleRequest game = new BundleRequest(AssetCategoryRoot.None, AssetBundleUtilities.ClientPlatform.ToString(), AssetBundleUtilities.ClientPlatform.ToString()); Resources.UnloadUnusedAssets(); if (!configuration.UseCache) { Caching.ClearCache(); } }
protected IObservable <T> GetBundle <T>(BundleRequest bundleNeeded) where T : UnityEngine.Object { #if UNITY_EDITOR if (EditorPreferences.EDITORPREF_SIMULATE_ASSET_BUNDLES) { return(Observable.FromCoroutine <T>((observer, cancellationToken) => SimulateAssetBundle <T>(bundleNeeded, observer, cancellationToken))); } #endif if (!assetService.UseStreamingAssets) { return(Observable.FromCoroutine <T>((observer, cancellationToken) => GetBundleFromWebOrCacheOperation <T>(bundleNeeded, observer, cancellationToken))); } else { return(GetBundleFromStreamingAssets <T>(bundleNeeded)); } }
protected IEnumerator GetBundleFromWebOrCacheOperation <T>(BundleRequest bundleNeeded, IObserver <T> observer, CancellationToken cancellationToken) where T : UnityEngine.Object { UnityWebRequest www = null; ManifestInfo manifestInfo = new ManifestInfo(bundleNeeded); AssetBundle bundle; Debug.Log(("AssetBundleLoader: " + bundleNeeded.AssetCacheState + " | Requesting: " + bundleNeeded.AssetName + " | " + bundleNeeded.BundleName).Colored(Colors.aqua)); if (bundleNeeded.AssetCacheState.Equals(bundleNeeded.AssetCacheState)) { yield return(manifestInfo.GetInfo().ToYieldInstruction()); www = UnityWebRequest.GetAssetBundle(bundleNeeded.AssetPath, manifestInfo.Hash, 0); } else { www = UnityWebRequest.GetAssetBundle(bundleNeeded.AssetPath); } yield return(www.SendWebRequest()); bundle = DownloadHandlerAssetBundle.GetContent(www); if (www.isNetworkError) { observer.OnError(new System.Exception("AssetBundleLoader: " + www.error)); } else { ProcessDownloadedBundle <T>(bundleNeeded, new LoadedBundle(bundle, manifestInfo)) .Subscribe(xs => { observer.OnNext(xs); observer.OnCompleted(); }); } www.Dispose(); }
protected IEnumerator SimulateAssetBundle <T>(BundleRequest bundleNeeded, IObserver <T> observer, CancellationToken cancellationToken) where T : UnityEngine.Object { Debug.Log(("AssetBundleLoader: Simulated | Requesting: " + bundleNeeded.AssetName + " | " + bundleNeeded.BundleName).Colored(Colors.aqua)); List <T> assets = new List <T>(); var guids = UnityEditor.AssetDatabase.FindAssets(bundleNeeded.BundleName); foreach (var id in guids) { var path = AssetDatabase.GUIDToAssetPath(id); var asset = UnityEditor.AssetDatabase.LoadAssetAtPath <T>(path); if (asset && asset.name.ToLower().Equals(bundleNeeded.BundleName.ToLower())) { assets.Add(asset); break; } yield return(null); } observer.OnNext(assets.First()); observer.OnCompleted(); }
public IObservable <T> GetAndLoadAsset <T>(BundleRequest bundleNeeded) where T : UnityEngine.Object { return(assetBundlebundleLoader.LoadAsset <T>(bundleNeeded)); }
public ManifestInfo(BundleRequest bundleNeeded) { bundle = bundleNeeded; }
protected IEnumerator RunAssetBundleCreateRequestOperation <T>(UnityEngine.AssetBundleCreateRequest assetBundleCreateRequest, BundleRequest bundleNeeded, IObserver <T> observer, CancellationToken cancellationToken) where T : UnityEngine.Object { while (!assetBundleCreateRequest.isDone && !cancellationToken.IsCancellationRequested) { yield return(null); } ProcessDownloadedBundle <T>(bundleNeeded, new LoadedBundle(assetBundleCreateRequest.assetBundle)) .Subscribe(xs => { if (!xs) { observer.OnError(new System.Exception("RunAssetBundleCreateRequestOperation: Error getting bundle " + bundleNeeded.AssetName)); } observer.OnNext(xs); observer.OnCompleted(); }); }