Unity AssetBundle 资源加载

AssetBundle常见的加载方式(2018.4)

AssetBundle.LoadFromFile
AssetBundle.LoadFromFileAsync
AssetBundle.LoadFromMemory
AssetBundle.LoadFromMemoryAsync
AssetBundle.LoadFromStream
AssetBundle.LoadFromStreamAsync

官方API链接

LoadFromFile:

从硬盘的文件中加载一个AssetBundle,如果AB包是LZ4加载方式,它只会加载AB包的Header,之后需要什么资源再加载那部分的AB包chunk。

优点:加载速度快,占用内存小。缺点:加载加密的AB包可能会失败。

LoadFromMemory:

从内存区域创建一个AssetBundle,可以通过byte[]把AB包完整的加载出来。

优点:可以通过byte[]加载加密过的AB包,缺点:内存占用高,会占用两份内存。

LoadFromMemory:

从托管流加载一个AssetBundle,数据是由一个managed Stream对象提供的。

优点:Seek()和Read()可以从任何Unity本地线程调用。 缺点:限制条件较多。

BuildAssetBundleOptions

None = 0:								默认方式。使用LZMA压缩算法,该算法压缩后包体很小,但是加载的时候需要花费很长的时间解压。
备注:第一次解压之后,该包又会使用LZ4压缩算法再次压缩。这就是为什么第一次加载时间长,之后加载时间就没那么长了。
(LZMA需要完整解压之后才能加载包内资源,LZ4不需要完整解压就可以加载包内资源。)
UncompressedAssetBundle = 1:			不压缩。虽然包体大,但是加载快。
CompleteAssets = 4:					强制包含整个资产。
DisableWriteTypeTree = 8:				不包含TypeTree信息。虽然可以使得AB包更小,但是对低版本不兼容。
DeterministicAssetBundle = 16:			创建一个哈希来映射存储在AB包里的对象的id。
ForceRebuildAssetBundle = 32:			强制重建AB包。
IgnoreTypeTreeChanges = 64:			当做增量构建检测时,忽略type tree的变化。
AppendHashToAssetBundleName = 128:		添加哈希到AB包名。
ChunkBasedCompression = 256:			使用基于块的LZ4压缩算法。
StrictMode = 512:						如果在构建时有任何错误,则不允许构建成功。
DryRunBuild = 1024:					干构建。
DisableLoadAssetByFileName = 4069:		禁止AB包通过文件名加载资源。
DisableLoadAssetByFileNameWithExtension = 8192:禁止AB包通过文件扩展名加载资源。

LZMA和LZ4压缩算法的区别

LZMA是流压缩方式(stream-based)。流压缩再处理整个数据块时使用同一个字典,它提供了最大可能的压缩率,但是只支持顺序读取。所以加载AB包时,需要将整个包解压,会造成卡顿和额外内存占用。优点是AB包小。

LZ4是块压缩方式(chunk-based)。块压缩的数据被分为大小相同的块,并被分别压缩。如果需要实时解压随机读取,块压缩是比较好的选择。优点是压缩比高,加载速度快。

项目可以针对本身的需求,制定不同的策略来进行压缩方式的选择。

猜你喜欢

转载自blog.csdn.net/qq_33808037/article/details/120079454