IEnumerator LoadAssetList(AssetListLoadedFunc callBack) { // Defer this function to the next frame until server replied and response has been downloaded UnityWebRequest req = UnityWebRequest.Get(string.Format("{0}/Bundle", this.ServerAddress)); yield return req.SendWebRequest(); if (req.isNetworkError || req.isHttpError) { _lastError = req.error; if (callBack != null) callBack(null); } else { Debug.Log("Asset Manager: Asset list finished downloading."); AssetBundleListing listing = JsonUtility.FromJson<AssetBundleListing>(req.downloadHandler.text); List<string> assetList = new List<string>(); foreach (var bundle in listing.AssetBundleList) { assetList.Add(bundle.BundleName); if (bundle.Thumbnail != null) { _thumbnails[bundle.BundleName] = System.Convert.FromBase64String(bundle.Thumbnail); bundle.Thumbnail = null; } } if (callBack != null) { // Dispatch events callBack(assetList); if (OnAssetListLoaded != null) { OnAssetListLoaded(assetList); } } } }
/// <summary> /// Sends a request to the Asset Server and fetches the list of all /// stored assets waiting to be queried asynchroniously. /// Due to the returning list containing the Thumbnails of the AssetBundles, /// this Request is a network-heavy process and should only be called once. /// </summary> /// <param name="callBack"> /// Method to be called when returning the list of Assets. /// Callback will get a null-argument if an error occured while fetchting the list. /// </param> public void RequestAssetList(AssetListLoadedFunc callBack) { Debug.Log("Asset Manager: Requesting asset list from server..."); StartCoroutine(LoadAssetList(callBack)); }