AssetBundle详解-01

323 阅读2分钟

「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」。

作为一名优秀的开发者,对于技术的探求应该是永无止步的,如何让自己更进步,那就只有不停的学习,不停的充电.而这些都都是说起来容易做起来难,坚持才是难的地方 --蛙哈哈

AssetBundle详解-01

1.什么AssetBundle

AssetBundle首先从字面意思理解为资源捆绑,就像一个ZIP压缩文件,里面存储着不同平台的特殊资源(models/texture/prefabs/materials/audio clip/scenes...), 这些资源都可以在运行时进行加载。

  1. AssetBundle自身保存着互相的依赖关系.

  2. 它是一个存在于硬盘上的文件。可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件可以分为两类:serialized file 和 resource files。(序列化文件和源文件.

serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个)

resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载.

  1. 可以使用不同的压缩算法进行压缩.

LZMA/LZ4

  1. 它是一个AssetBundle对象,我们可以通过代码从一个特定的压缩包加载出来的对象。这个对象包含了所有我们当初添加到这个压缩包里面的内容,我们可以通过这个对象加载出来使用.

  2. 它有平台差异性

为任何独立平台构建的AssetBundle只能在该平台上加载,而不能在其他平台上加载.

2.如何使用

BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, 	BuildTarget.StandaloneWindows64);

dir: 任意合法路径

BuildAssetBundleOptions:

BuildAssetBundleOptions.None:使用LZMA算法压缩,压缩的包更小,但是加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用LZ4重新压缩。使用资源的时候不需要整体解压。在下载的时候可以使用LZMA算法,一旦它被下载了之后,它会使用LZ4算法保存到本地上。

BuildAssetBundleOptions.UncompressedAssetBundle:不压缩,包大,加载快

BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。

image-20220218203512639.png

使用不同的选项构建出来的宝包体大小的对比:

image-20220218203556164.png

BuildAssetBundleOptions.UncompressedAssetBundle(未压缩)

image-20220218203613132.png BuildAssetBundleOptions.ChunkBasedCompression(LZ4)

image-20220218203632893.png

BuildAssetBundleOptions.None(LZMA)