Allen Kashiwa Blog

羁旅红尘不曾醉,笑歌年少且长行。

专注游戏开发与设计


唯佳人与游戏不可辜负

Unity5.x新的AssetBundle机制02——压缩

前言

unity_cover.png

本节来讲讲Unity5新的AssetBundle机制中的压缩。

你可以不对你的AssetBundles进行压缩,这样虽然文件很大,但是一旦下载好之后访问是最快的。 通常都会进行压缩。并且Unity的AssetBundles支持LZMA和LZ4两种格式的压缩。

LZMA(Ziv–Markov chain algorithm)格式。

这是Unity打包成AssetBundle时的默认格式,会将序列化数据压缩成一个LZMA流,使用时需要整体解包。优点是打包后体积小,缺点是解包时间长导致加载时间长。

LZ4格式

相较LZMA会生成更大的压缩文件,但优点是使用时不需要整体解压。LZ4是一种基于chunk的算法,加载对象时只有相应的chunk会被解压。该格式需要unity5.3以上的版本,以前的版本并不支持。 如果你对使用不同的压缩格式和不同的加载API对内存开销及性能的影响感兴趣,可以参考这张表:

compression_table.png

如果你不敢兴趣,那遵循以下规则好了:

1.将AssetBundles作为StreamAssets中的内容一同发布。 打包AssetBundles时使用BuildAssetBundleOptions.ChunkBasedCompression选项,加载资源时使用AssetBundle.LoadFromFileAsync接口。这样做可以达到数据压缩的效果又能使加载资源的效率如同读取缓存一般。

2.将AssetBundles作为DLCs下载。 打包AssetBundles时使用默认的压缩格式(LZMA),使用 LoadFromCacheOrDownload/WebRequest来下载和缓存。这样你将有最大的压缩率。

3.加密 打包AssetBundles时使用BuildAssetBundleOptions.ChunkBasedCompression选项,加载资源时使用LoadFromMemoryAsync接口(这可能是该接口及其同步版本唯一应该使用到的地方)。

4.自定义压缩 打包AssetBundles时使用BuildAssetBundleOptions.UncompressedAssetBundle选项,使用自己的算法压缩,加载资源时用相应算法解压后使用LoadFromFileAsync接口。

你应该尽量使用异步的接口。


参考链接:

http://docs.unity3d.com/Manual/AssetBundleCompression.html

用支付宝请我喝咖啡

用微信请我吃辣条

最近的文章

Just for fun——Unity5制作贪吃蛇小游戏

前言说出来你可能不信。有一天晚上睡不着觉,就突然想到做游戏开发这么久,还没亲手实现过经典游戏贪吃蛇呢。然后就在床上想实现的方法,越想越手痒,要不是怕把枕边人吵醒,第二天又要上班,真要立刻爬起来把这小游戏实现了。于是想了一会儿,理清思路之后就逼自己入睡了。第二天下班之后,回到家就开始动手,已经搞定了。为了节约篇幅,本篇文章只简单说下思路。不想看我废话,需要直接参考代码的同学可以到我的Github。准备工作我使用了Unity自带的创建简单3D物体的功能来制作蛇头和蛇身的prefab。蛇身直接用...…

继续阅读
更早的文章

Unity5.x新的AssetBundle机制03——下载与使用

前言本节我们来讲讲AssetBundle的下载与使用。在第一节Unity5.x新的AssetBundle机制01——构建中,我们已经准备好了需要的AssetBundles。本节我们就来使用这些保存好的资源。实践有两种方法可以下载AssetBundles:非缓存式。new一个WWW对象的方式,AssetBundles不会保留在本地设备的unity缓存文件夹中。我们使用这种方式来实践一下。打开第一节中已经准备好的工程。新建Scripts文件夹,并在其中新建脚本:NonCacheBundle.c...…

继续阅读