我正在Unity 2017.1.0f3中开发一个应用程序(如果这很重要,则为HoloLens)。这个应用程序有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?
答案 0 :(得分:2)
您可以单独卸载捆绑包:
bundle.Unload(bool unloadAllLoadedObjects);
或者可以卸载所有已装载的捆绑包:
UnloadAllAssetBundles(bool unloadAllObjects);
小心使用bool unloadAllObjects选项,默认为false。如果设置为true,则将销毁所有实例化资产,从而获得缺少的引用。
*如果您不知道所有已加载的软件包,则可以获得所有已加载软件包的可列出的列表:
AssetBundle.GetAllLoadedAssetBundles