我是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());
}
}
}