要了解如何压缩Unity,要从发现问题开始。
每次打包完之后,请通过一下方式查看Build结果:
打开log文件,找到这里:
看到这里你可能会有疑问,例如我Android平台上面的Apk打包出来也就30多MB,这里怎么显示Complete Size 是94.2MB呢?一张图片8MB怎么可能?
png和jpg都是一种压缩格式,图片的真正模样是这样的:例如我有一张图,2 x 2的图,也就是说这张图有4个像素,每个像素都通过一个整数来表示颜色,这个整数可以8位,16位,32位,如果是8位的话这张图的大小最后就是2 x 2 x 8 = 32位 = 4个字节。而png和jpg只是对图片的一种压缩,unity资源并不压缩图片资源,它只认真正的图片大小,如果上面的2 x 2 x 8图片经过png压缩变成了1个字节,虽然你在电脑的文件夹看到的是1个字节,但是当unity build之后,不好意思这长图片就是4个字节,而且不管你使用什么压缩格式png啊jpg啊都没用,因为图片真正的样子就是四个字节。
那你又会问,好的这个我接受但是为什么unity变成90多MB之后变成apk又被压缩成30多MB了?
众所周知,Unity是跨平台的,因此Unity的资源(jpg,png等等)最后都会被打包成Unity资源,在安卓上面Unity资源存放在apk的Assets/bin/data里面,而apk本身就是一种压缩格式(具体是zip还是啥的我忘了),所以虽然unity资源把图片还原成4个字节但是apk又把它进行apk压缩了所以包体看起来没那么大。
好了,说了这么多那我们怎么压缩包体?
想通过代码来减小体积肯定不可行,那么我们只能把注意力放到资源文件了。
上文讲到一个像素可以是8位,16位,32位,我们直接将图片的位数直接降低就行了,如果你之前一直使用32位或者truecolor,那么全部强制换成16位,Unity资源直接减少一半!
不过提醒一下,画面质量会降低,但是不会很明显。