多次下载 AssetBundle 失败

Downloading an AssetBundle more than once fails

我正在 Unity 2017.1.0f3 中开发一个应用程序(如果重要的话,用于 HoloLens)。此应用有 3 个场景

这是下载 AssetBundle

的协程
IEnumerator GetAssetBundle(string assetUrl, Action<AssetBundle> successCallback, Action<string> errorCallback )
    {
        UnityWebRequest request = UnityWebRequest.GetAssetBundle(assetUrl);

        yield return request.Send();

        if (request.isHttpError || request.isNetworkError)
        {
            errorCallback(request.error);
        }
        else
        {
            AssetBundle bundle = ((DownloadHandlerAssetBundle)request.downloadHandler).assetBundle;

            successCallback(bundle);
        }
    }

用户可以在场景之间来回切换,并且可能 select 同一资源两次。这是问题发生的时候。

用户第一次尝试下载 AssetBundle 一切正常。 第二次(以及所有后续)下载失败。失败不是下载过程中的错误而是这个
((DownloadHandlerAssetBundle)request.downloadHandler).assetBundle; 始终为空。

我认为 Unity 不允许您下载相同的文件 AssetBundle 多次,并且下载后必须对其进行缓存。是这样吗? 我想避免这种情况,因为该应用程序最终可能会有大量 AssetBundle 可供下载,并且在下载后将它们全部缓存是一个糟糕的选择。

您是否知道在需要时多次下载同一个 AssetBundle 的方法?

您可以单独卸载您的捆绑包:

bundle.Unload(bool unloadAllLoadedObjects);

或者可以大量卸载所有加载的包:

UnloadAllAssetBundles(bool unloadAllObjects);

注意 bool unloadAllObjects 选项,默认情况下为 false。如果您设置为 true,您所有的实例化资产都将被销毁并丢失引用。

*如果您不知道所有已加载的捆绑包,您可以获得所有已加载捆绑包的可枚举列表: AssetBundle.GetAllLoadedAssetBundles