如何从 Unity 资源包获取哈希以检查缓存?



我是AssetBundle的新手,并尝试了解这一点。目前,我可以从服务器加载资产,但无法从资产文件本身获取哈希。它保持返回空异常。

我尝试按照这里的文档进行操作: https://docs.unity3d.com/ScriptReference/Caching.html

但仍然不知道,并在哈希中获取NullException。

也发现了这个,没有运气: 如何在 Unity3D 中从 AssetBundle 获取 AssetBundle Manifest

然后我尝试按照这篇文章中的说明进行操作: 从 AssetBundle 获取 Hash128 用于 Caching.IsVersionCached 函数

但仍然得到空异常()

这是我点击最新链接的代码:

IEnumerator DownloadAssetBundle()
{
UnityWebRequest www = UnityWebRequestAssetBundle.GetAssetBundle("https://www.dropbox.com/s/66psd4aphlgpo2j/testasset?dl=1");
yield return www.SendWebRequest();
if(www.isNetworkError || www.isHttpError) 
{
Debug.Log(www.error);
}
else 
{
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(www);
AssetBundleRequest asset = bundle.LoadAssetAsync<AssetBundleManifest>("assetManifestName");
yield return asset;
//Get the AssetBundleManifest
AssetBundleManifest loadedAssetMf = asset.asset as AssetBundleManifest;
//Get Hash128 from the AssetBundleManifest
Hash128 tempHash128 = loadedAssetMf.GetAssetBundleHash("");
//Pass to the IsVersionCached function 
Caching.IsVersionCached("https://www.dropbox.com/s/66psd4aphlgpo2j/testasset?dl=1", tempHash128);
//Instantiate(bundle.LoadAsset("RayBan_Sunglasses"));
}
}

谁能解释一下如何从我做错了什么assetBundle获取哈希?

我的资源包的文件名是"testasset"如果您愿意,请指定放置"testasset"的位置,这将是一种乐趣。非常感谢您的每一个答案。

您需要的资产包清单存储在平台捆绑包中,该平台包与根据此页面在其内部的文件夹具有相同的名称, 首先,您需要加载平台的资产包,然后从中获取资产包清单对象,从该清单中,您将能够获得哈希代码

private IEnumerator LoadAssetBundleManifest(string uri)
{
using (UnityWebRequest uwr = UnityWebRequestAssetBundle.GetAssetBundle(uri))
{
yield return uwr.SendWebRequest();
if (uwr.isNetworkError || uwr.isHttpError)
{
Debug.Log(uwr.error);
}
else
{
// Get downloaded asset bundle
bundleManifest = DownloadHandlerAssetBundle.GetContent(uwr);
AssetBundleManifest testManifst = bundleManifest.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
Debug.Log(testManifst.GetAssetBundleHash("bundlename").ToString());
}
}
}

最新更新