AssetBundle系列(二)

AssetBundle 与 UWR

AssetBundle 下载

AssetBundle 缓存

为了使用 WWW 或 UnityWebRequest (UWR) 来优化 LZMA AssetBundle 的提取、再压缩和版本控制,Unity 有两种缓存:

  • 内存缓存以 UncompressedRuntime 格式将 AssetBundle 存储在 RAM 中;

  • 磁盘缓存将提取的 AssetBundle 以下文描述的压缩格式存储在可写介质中。

将 AssetBundle 加载到内存缓存中会耗用大量的内存。除非您特别希望频繁且快速地访问 AssetBundle 的内容,否则内存缓存的性价比可能不高。因此,应改用磁盘缓存。

如果向 UWR API 提供版本参数,Unity 会将 AssetBundle 数据存储在磁盘缓存中。如果没有提供版本参数,Unity 将使用内存缓存。版本参数可以是版本号或哈希。如果 Caching.compressionEnabled 设置为 true,则对于所有后续下载,Unity 会在将 AssetBundle 写入磁盘时应用 LZ4 压缩。它不会压缩缓存中的现有未压缩数据。如果 Caching.compressionEnabled 设置为 false,Unity 在将 AssetBundle 写入磁盘时不会应用压缩。

最初加载缓存的 LZMA AssetBundle 所花费的时间更长,因为 Unity 必须将存档重新压缩为目标格式。随后的加载将使用缓存版本。

AssetBundle.LoadFromFile 或 AssetBundle.LoadFromFileAsync 始终对 LZMA AssetBundle 使用内存缓存,因此您应该使用 UWR API。如果无法使用 UWR API,您可以使用 AssetBundle.RecompressAssetBundleAsync 将 LZMA AssetBundle 重写到磁盘中。

内部测试表明,使用磁盘缓存而不是内存缓存在 RAM 使用率方面至少存在一个数量级的差异。因此,必须在内存影响、增加的磁盘空间要求以及应用程序的资源实例化时间之间进行权衡。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值