C# 如何从Unity AssetBundle获取哈希以检查缓存?
我是AssetBundle的新手,尝试了解这一点。目前,我可以从服务器加载资产,但无法从资产文件本身获取哈希。它一直保持着异常 我已经试着按照这里的文档进行操作: 但是仍然不知道,并且也在Hash中获取null异常 也发现了这个,但没有运气: 然后我试着按照这篇文章中的说明: 但是仍然得到NullException() 以下是我在最新链接中遵循的代码:C# 如何从Unity AssetBundle获取哈希以检查缓存?,c#,unity3d,caching,hash,assetbundle,C#,Unity3d,Caching,Hash,Assetbundle,我是AssetBundle的新手,尝试了解这一点。目前,我可以从服务器加载资产,但无法从资产文件本身获取哈希。它一直保持着异常 我已经试着按照这里的文档进行操作: 但是仍然不知道,并且也在Hash中获取null异常 也发现了这个,但没有运气: 然后我试着按照这篇文章中的说明: 但是仍然得到NullException() 以下是我在最新链接中遵循的代码: IEnumerator DownloadAssetBundle() { UnityWebRequest www = UnityWe
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"));
}
}
IEnumerator下载资产绑定()
{
UnityWebRequest www=UnityWebRequestAssetBundle.GetAssetBundle(“https://www.dropbox.com/s/66psd4aphlgpo2j/testasset?dl=1");
返回www.SendWebRequest();
如果(www.isNetworkError | | www.isHttpError)
{
Debug.Log(www.error);
}
其他的
{
AssetBundle bundle=DownloadHandlerAssetBundle.GetContent(www);
AssetBundlerRequest asset=bundle.LoadAssetSync(“assetManifestName”);
资产收益率;
//获得AssetBundleManifest
AssetBundleManifest loadedAssetMf=asset.asset作为AssetBundleManifest;
//从AssetBundleManifest获取Hash128
Hash128 tempHash128=loadedAssetMf.GetAssetBundleHash(“”);
//传递给IsVersionCached函数
缓存.IsVersionCached(“https://www.dropbox.com/s/66psd4aphlgpo2j/testasset?dl=1“,第128段);
//实例化(bundle.LoadAsset(“RayBan_太阳镜”);
}
}
谁能解释一下如何从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());
}
}
}
private IEnumerator LoadAssetBundleManifest(字符串uri)
{
使用(UnityWebRequest uwr=UnityWebRequestAssetBundle.GetAssetBundle(uri))
{
产生返回uwr.SendWebRequest();
if(uwr.isNetworkError | | uwr.isHttpError)
{
调试日志(uwr.error);
}
其他的
{
//获取下载的资产包
bundleManifest=DownloadHandlerAssetBundle.GetContent(uwr);
AssetBundleManifest testManifst=bundleManifest.LoadAsset(“AssetBundleManifest”);
Log(testManifst.GetAssetBundleHash(“bundlename”).ToString();
}
}
}
您所需的资产捆绑清单存储在平台捆绑包中,该平台捆绑包的名称与其内部文件夹的名称相同,根据此,
首先,您需要加载平台的资产包,然后从中获取资产包清单对象,从该清单中您将能够获取哈希代码
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());
}
}
}
private IEnumerator LoadAssetBundleManifest(字符串uri)
{
使用(UnityWebRequest uwr=UnityWebRequestAssetBundle.GetAssetBundle(uri))
{
产生返回uwr.SendWebRequest();
if(uwr.isNetworkError | | uwr.isHttpError)
{
调试日志(uwr.error);
}
其他的
{
//获取下载的资产包
bundleManifest=DownloadHandlerAssetBundle.GetContent(uwr);
AssetBundleManifest testManifst=bundleManifest.LoadAsset(“AssetBundleManifest”);
Log(testManifst.GetAssetBundleHash(“bundlename”).ToString();
}
}
}