0

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

  • 场景 1. 用户提供凭据并使用服务进行身份验证。
  • 场景 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可供下载的 s 并在下载后将它们全部缓存是一个不好的选择。

如果需要,您是否知道多次下载同一个 AssetBundle 的方法?

4

1 回答 1

2

您可以单独卸载捆绑包:

bundle.Unload(bool unloadAllLoadedObjects);

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

UnloadAllAssetBundles(bool unloadAllObjects);

注意 bool unloadAllObjects 选项,默认为 false。如果您设置为 true,则您的所有实例化资产都将因缺少引用而被销毁。

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

于 2017-09-12T10:57:50.170 回答