Hi, I seem to be having trouble saving caches when downloading Asset Bundles from a Google Cloud server. From what I can see in the documentation, it seems like the caching is supposed to happen automatically? Can anyone confirm please? And if this is not the case, what is the solution please?
IEnumerator Start()
{
mainBundle = UnityWebRequestAssetBundle.GetAssetBundle("https://storage.googleapis.com/assetbundles_rfd/StreamingAssets");
yield return mainBundle.SendWebRequest();
Debug.Log(mainBundle.downloadProgress);
if (mainBundle.result != UnityWebRequest.Result.Success)
{
Debug.Log(mainBundle.error);
}
else
{
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(mainBundle);
AssetBundleRequest asset = bundle.LoadAssetAsync<AssetBundleManifest>("assetbundlemanifest");
yield return asset;
//Get the AssetBundleManifest
AssetBundleManifest loadedAssetMf = asset.asset as AssetBundleManifest;
while (Caching.ready == false)
yield return null;
//Get Hash128 from the AssetBundleManifest
var bundles = loadedAssetMf.GetAllAssetBundles();
foreach (var v in bundles)
{
Hash128 tempHash128 = loadedAssetMf.GetAssetBundleHash(v);
bundleHashes.Add(new BundleWrapper
{
bundleHash = tempHash128,
bundleName = v
});
Debug.Log("Is " + v + " cached: " + Caching.IsVersionCached("https://storage.googleapis.com/assetbundles_rfd/" + v, tempHash128));
Logger.Instance.AddLog("Is " + v + " cached: " + Caching.IsVersionCached("https://storage.googleapis.com/assetbundles_rfd/" + v, bundleHashes.Where(item => item.bundleName == v).FirstOrDefault().bundleHash));
if (Caching.IsVersionCached("https://storage.googleapis.com/assetbundles_rfd/" + v, bundleHashes.Where(item => item.bundleName == v).FirstOrDefault().bundleHash) == false)
{
otherBundles = UnityWebRequestAssetBundle.GetAssetBundle("https://storage.googleapis.com/assetbundles_rfd/" + v);
Debug.Log("https://storage.googleapis.com/assetbundles_rfd/" + v);
Logger.Instance.AddLog("https://storage.googleapis.com/assetbundles_rfd/" + v);
yield return otherBundles.SendWebRequest();
if (otherBundles.result != UnityWebRequest.Result.Success)
{
Debug.Log(otherBundles.error);
Logger.Instance.AddError(otherBundles.error);
}
else
{
Debug.Log("Success!");
Logger.Instance.AddSuccess("Success!");
AssetBundle otherBundle = DownloadHandlerAssetBundle.GetContent(otherBundles);
Instantiate(otherBundle.LoadAsset("Shrek_Model"));
bundle.Unload(false);
}
}
}
}
}
The full stack of the code is executed, and the “success!” message is called at the end once the uncached bundle has been downloaded, but then it seems that the newly downloaded bundle doesn’t ever get saved.
Any insight would be greatly appreciated, thanks!