Как получить хеш из Unity AssetBundle для проверки кеша?

Я новичок в AssetBundle и пытаюсь узнать об этом. В настоящее время я могу загрузить актив с сервера, но не могу получить хэш из самого файла актива. Он сохраняет return NullException.

Я пробовал следовать документу здесь: https://docs.unity3d.com/ScriptReference/Caching.html

Но до сих пор понятия не имею, и получите исключение NullException в Hash.

Нашел и это тоже, и не повезло: Как получить AssetBundleManifest из AssetBundle в Unity3D

Затем я попытался выполнить инструкции в этом сообщении: Получить Hash128 из AssetBundle для функции Caching.IsVersionCached

Но все равно получите 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"));
    }
}

Может ли кто-нибудь объяснить, как получить хэш от assetBundle, что я сделал не так?

Имя файла моего Asset Bundle - "testasset". Пожалуйста, укажите, куда поместить "testasset", было бы приятно. Большое спасибо за каждый ответ.


person Thunchanit Jongsathaponpong    schedule 14.08.2019    source источник


Ответы (1)


манифест пакета ресурсов, который вам нужен, хранится в пакете платформы, который имеет то же имя, что и папка внутри, в соответствии с этим page, сначала вам нужно загрузить пакет ресурсов платформы, а затем вы получите из него объект манифеста пакета ресурсов, из этого манифеста вы сможете получить хэш-код

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());
        }
    }
}
person XRDevneer    schedule 22.07.2020