不止一次下载AssetBundle失败

时间:2017-09-12 10:29:09

标签: c# unity3d assetbundle

我正在Unity 2017.1.0f3中开发一个应用程序(如果这很重要,则为HoloLens)。这个应用程序有3个场景

  • 场景1.用户提供凭据并使用a进行身份验证 服务。
  • 场景2.服务提供,应用程序显示用户可以选择的资源列表。
  • 场景3.选择资源后,会下载AssetBundle并显示给用户。

这是下载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);
        }
    }

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

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

我认为Unity不会允许您下载相同AssetBundle次的AssetBundle次,并且一旦下载它就必须缓存它。是这样的吗? 我想避免这种情况,因为应用最终可以提供大量的{{1}}可供下载,并且一旦下载它们就会将它们全部缓存是一个糟糕的选择。

如果需要,您是否知道如何多次下载相同的AssetBundle?

1 个答案:

答案 0 :(得分:2)

您可以单独卸载捆绑包:

bundle.Unload(bool unloadAllLoadedObjects);

或者可以卸载所有已装载的捆绑包:

UnloadAllAssetBundles(bool unloadAllObjects);

小心使用bool unloadAllObjects选项,默认为false。如果设置为true,则将销毁所有实例化资产,从而获得缺少的引用。

*如果您不知道所有已加载的软件包,则可以获得所有已加载软件包的可列出的列表: AssetBundle.GetAllLoadedAssetBundles

相关问题