unity3d - AssetBundle 缓存过程。缓存 Unity 资产包时会发生什么?ab 的哪些属性使其与其缓存形式不同?
问题描述
这可能是一个非常小众的问题,但是对于 Unity 4 使用的资产包系统,资产包和缓存包之间的具体区别是什么?我很好奇缓存文件与资产包有何不同,以及两种类型的文件有哪些不同的属性(如果有的话)?IE 缓存资产包时会发生什么WWW.LoadFromCacheOrDownload
?
不幸的是, Unity没有记录这个过程,因为开源代码调用了一个INTERNAL_CALL_WWW(this, url, ref hash, crc)
名为反编译的 5.3.2p2 代码,2017+ 代码在 Unity 官方 GitHub 上,但似乎与 Unity 2015 代码不同)。
Unity 2017 代码导致private extern static IntPtr CreateCached(DownloadHandlerAssetBundle obj, string url, string name, Hash128 hash, uint crc);
外部方法,也没有记录。
此外,当缓存资产包以便引擎可以识别文件在缓存中并且不需要下载时,实际会发生什么?它只是简单地在缓存中搜索散列名称,还是做一些更复杂的事情?
霜冻
解决方案
我可以清楚地看到创建的资产包(那些放在服务器上以供稍后下载)和缓存的资产包(那些在运行时下载一次并存储到设备)之间的大小差异。在 Windows 上,您可以在 %appdata%/Local Low/Unity/company+name_of_app 找到它们。缓存版本通常压缩程度较低,因此应用程序可以更快地加载它们,而存储在服务器上的版本压缩程度更高,因此下载所需的带宽更少。内容应该相同,但使用不同的方法压缩。有关更多详细信息,请参阅此文档页面。
推荐阅读
- docker - Docker 步骤结果到日志文件 - Jenkins
- c# - Bamboo 显示测试用例为 0,即使应用程序中有测试用例
- javascript - 给定一个整数数组返回正数,其中存在等效的负数
- elasticsearch - Elasticsearch 中的一个自定义分析器中的多个标记器
- android - 当应用程序在 Oreo 的前台时启动服务时出现 IllegalStateException
- javascript - JavaScript - 获取浏览器支持的语言环境的完整列表
- python - 两个列表和声明
- c# - .net mvc 国际化使用资源文件仅返回英语
- c# - 在实体框架核心中没有将实体映射到表的方法
- arrays - 如何将 32 个 std_logic_vetor 字写入 VHDL 中的数组