AssetBundle 缓存过程。缓存 Unity 资产包时会发生什么? ab 的哪些属性使其不同于其缓存形式?

AssetBundle Caching Process. What happens when a Unity asset bundle is cached? What properties of an ab make it different from its cached form?

这可能是一个非常小众的问题,但是Unity 4使用的资产包系统的资产包和缓存包之间的具体区别是什么?我很好奇缓存文件与资产包有何不同,两种类型的文件有什么不同的属性(如果有)发生变化? IE。通过 WWW.LoadFromCacheOrDownload 缓存资产包时会发生什么情况?

不幸的是,Unity 没有记录这个过程,因为开源代码调用了一个名为 INTERNAL_CALL_WWW(this, url, ref hash, crc) 的内部函数,它被赋予了 WWW 的实例,URL 的字符串,一个 Hash128和一个名为 crc 的 UINT,默认值为 0。(Referenced decompiled 5.3.2p2 code, 2017+ code is on the official Unity GitHub, but seems to differ from Unity 2015 code).

Unity 2017 代码指向 private extern static IntPtr CreateCached(DownloadHandlerAssetBundle obj, string url, string name, Hash128 hash, uint crc); 外部方法,该方法也未记录。

此外,缓存资产包以便引擎可以识别文件在缓存中并且不需要下载时实际发生了什么?它只是简单地在缓存中搜索散列名称,还是做一些更复杂的事情?

Frostrix

我可以清楚地看到创建的资产包(那些放在服务器上供以后下载的)和缓存的资产包(那些在运行时下载一次并存储到设备上的)之间的大小差异。在 Windows 上,您可以在 %appdata%/Local Low/Unity/company+name_of_app 找到它们。缓存版本通常压缩率较低,因此应用程序可以更快地加载它们,而存储在服务器上的版本压缩率更高,因此下载所需的带宽更少。内容应该相同,但使用不同的方法进行压缩。有关详细信息,请参阅 this docs page