多次下载 AssetBundle 失败
Downloading an AssetBundle more than once fails
我正在 Unity 2017.1.0f3 中开发一个应用程序(如果重要的话,用于 HoloLens)。此应用有 3 个场景
- 场景 1. 用户提供凭据并使用
服务。
- 场景二,服务提供,应用展示资源列表,用户可以选择。
- 场景 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);
}
}
用户可以在场景之间来回切换,并且可能 select 同一资源两次。这是问题发生的时候。
用户第一次尝试下载 AssetBundle
一切正常。
第二次(以及所有后续)下载失败。失败不是下载过程中的错误而是这个
((DownloadHandlerAssetBundle)request.downloadHandler).assetBundle;
始终为空。
我认为 Unity 不允许您下载相同的文件 AssetBundle
多次,并且下载后必须对其进行缓存。是这样吗?
我想避免这种情况,因为该应用程序最终可能会有大量 AssetBundle
可供下载,并且在下载后将它们全部缓存是一个糟糕的选择。
您是否知道在需要时多次下载同一个 AssetBundle 的方法?
您可以单独卸载您的捆绑包:
bundle.Unload(bool unloadAllLoadedObjects);
或者可以大量卸载所有加载的包:
UnloadAllAssetBundles(bool unloadAllObjects);
注意 bool unloadAllObjects 选项,默认情况下为 false。如果您设置为 true,您所有的实例化资产都将被销毁并丢失引用。
*如果您不知道所有已加载的捆绑包,您可以获得所有已加载捆绑包的可枚举列表:
AssetBundle.GetAllLoadedAssetBundles
我正在 Unity 2017.1.0f3 中开发一个应用程序(如果重要的话,用于 HoloLens)。此应用有 3 个场景
- 场景 1. 用户提供凭据并使用 服务。
- 场景二,服务提供,应用展示资源列表,用户可以选择。
- 场景 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);
}
}
用户可以在场景之间来回切换,并且可能 select 同一资源两次。这是问题发生的时候。
用户第一次尝试下载 AssetBundle
一切正常。
第二次(以及所有后续)下载失败。失败不是下载过程中的错误而是这个
((DownloadHandlerAssetBundle)request.downloadHandler).assetBundle;
始终为空。
我认为 Unity 不允许您下载相同的文件 AssetBundle
多次,并且下载后必须对其进行缓存。是这样吗?
我想避免这种情况,因为该应用程序最终可能会有大量 AssetBundle
可供下载,并且在下载后将它们全部缓存是一个糟糕的选择。
您是否知道在需要时多次下载同一个 AssetBundle 的方法?
您可以单独卸载您的捆绑包:
bundle.Unload(bool unloadAllLoadedObjects);
或者可以大量卸载所有加载的包:
UnloadAllAssetBundles(bool unloadAllObjects);
注意 bool unloadAllObjects 选项,默认情况下为 false。如果您设置为 true,您所有的实例化资产都将被销毁并丢失引用。
*如果您不知道所有已加载的捆绑包,您可以获得所有已加载捆绑包的可枚举列表:
AssetBundle.GetAllLoadedAssetBundles