【发布时间】:2017-09-12 19:03:31
【问题描述】:
我正在 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,并且您必须在下载后对其进行缓存。是这样吗?
我想避免这种情况,因为该应用程序最终可以有大量的AssetBundles 可供下载,并且在下载后将它们全部缓存是一个不好的选择。
如果需要,您是否知道多次下载同一个 AssetBundle 的方法?
【问题讨论】:
-
完成后尝试卸载你的包:bundle.Unload()
-
@joreldraw 这行得通。你知道我是否也应该做类似
Caching.CleanCache的事情。另外,如果您想将您的评论变成答案,以便我接受它 -
小心使用
AssetBundle.Unload()“如果你的场景中有游戏对象引用了这些资源,那么对它们的引用就会丢失” 如果你不在乎然后使用它。一个合适的解决方案是像普通文件一样手动下载资产并手动保存。如果您想这样做,请不要使用GetAssetBundle或DownloadHandlerAssetBundle。 -
清除所有内容的唯一选择是卸载所有资产包
-
@Programmer 我需要的是 bundle.Unload(false);这不会破坏已经实例化的对象。
标签: c# unity3d assetbundle