【问题标题】:Unity3D how does AssetBundle cache work?Unity3D AssetBundle 缓存是如何工作的?
【发布时间】:2018-01-03 17:50:45
【问题描述】:

我有点困惑:

第一次下载assetbundle后,Unity怎么知道我已经下载了,第二次直接从缓存(磁盘)加载?

它是否使用 url 映射到本地存储?如果在这种情况下,如果我在服务器上使用相同的名称更新我的资产包,第二次,它仍然会从缓存中加载,因为 url 没有改变?

示例代码:

UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, 0);
yield return request.Send();
//only download at the first time, at the second time, it can be loaded from cache
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
GameObject cube = bundle.LoadAsset<GameObject>("Cube");

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    要有缓存;

    而不是调用:

    UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, 0);
    

    您必须使用版本号调用 GetAssetBundle:

    UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, 1, 0);
    

    在此处查看文档: https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequest.GetAssetBundle.html

    您也可以通过调用new DownloadHandlerAssetBundle(string url, uint version, uint crc); 来实现这一点。在此处查看示例代码: https://docs.unity3d.com/ScriptReference/Networking.DownloadHandlerAssetBundle-ctor.html 和这里的文档: https://docs.unity3d.com/ScriptReference/Networking.DownloadHandlerAssetBundle-ctor.html

    请注意,当您使用缓存时,request.responseCode 的值将不再是 200(成功),而是在从缓存中检索数据时为 0!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 2018-10-15
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多