Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Unity AssetBundle获取哈希以检查缓存?_C#_Unity3d_Caching_Hash_Assetbundle - Fatal编程技术网

C# 如何从Unity AssetBundle获取哈希以检查缓存?

C# 如何从Unity AssetBundle获取哈希以检查缓存?,c#,unity3d,caching,hash,assetbundle,C#,Unity3d,Caching,Hash,Assetbundle,我是AssetBundle的新手,尝试了解这一点。目前,我可以从服务器加载资产,但无法从资产文件本身获取哈希。它一直保持着异常 我已经试着按照这里的文档进行操作: 但是仍然不知道,并且也在Hash中获取null异常 也发现了这个,但没有运气: 然后我试着按照这篇文章中的说明: 但是仍然得到NullException() 以下是我在最新链接中遵循的代码: IEnumerator DownloadAssetBundle() { UnityWebRequest www = UnityWe

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

我已经试着按照这里的文档进行操作:

但是仍然不知道,并且也在Hash中获取null异常

也发现了这个,但没有运气:

然后我试着按照这篇文章中的说明:

但是仍然得到NullException()

以下是我在最新链接中遵循的代码:

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