前两天有人问我关于Unity打包的包体机大的问题,其实这个在网上已经有不少人说了,但是还是想自己再整理下。
首先在Unity里面打包时存放在Resources目录下的内容都会被Unity打包进去,而且这个Resources目录不一定是在Assets目录下的那个,只要你的目录中有Resources,那么都会被打包,这是因为Unity本身会遍历目录下所有叫Resources的目录,举个例子,Assets目录下你有一个叫Resources的目录,然后在还有个目录在Assets/Heros/Resources,那么这两个目录下的资源都会被打包进去。
其次所有的图片资源在导入到Unity后,在Unity中它被使用的大小是不一样的,比如你原图可能只有5k的一个图片,放到Unity中你点这个图片,你再Inspector视图的最下面可以看到它导入后实际使用的大小,往往比较大。这时你看导入信息里的MaxSize属性可能是2048,就是因为导入时Unity将它放大了,如果你的图片本身到不了这么大,就可以将它缩小,以减少在打包时的资源大小,另外这个图的大小他的长宽都是2的立方的倍数,类似于512,1024这样的,因为Unity本身对图片的处理就是这样的,这也是为什么NGUI打包图集也是在一个正方形的图片里,尽可能的利用空间,你可以想一下有两个图片完全可以放在一个2048的图里,而再导入到unity里变成了两个2048大小的图片,这其实是很浪费资源的。另外在图片导入信息里面的一些其他属性的选项也是会改变文件大小的,比如使用的渲染方式,alpha通道什么的,但是可能会改变图片质量,总之可以尝试更改只要保证图片质量没有明显的变化又缩小了体积都是可以的,注意更改以后要点击Apply让更改生效。
第三个也是问我的朋友说到的iOS打包大的问题,这个我仔细查了一下文档,iOS由于苹果的一些特殊原因导致了它打包就是要比安卓大一些,不过还是可以通过更改两个地方使得包体机略微缩小。就是在BuildSetting里的PlayerSetting中把iOS打包的OtherSettings里有一个Scripting Backend改为IL2CPP,然后Architecture那里看需求可以将Universal改为ARM64,因为Universal是通用的,就会同时支持ARMV7 和ARM64,导致包体机变大,按现在苹果的政策,最新的APP上架必须是ARM64,如果不是非要兼容ARMV7,可以改为ARM64。
最后说一下,其实现在很多Unity做的游戏也好,VR,AR的应用也好,很多都会用AssetBundle来动态加载,这也是为什么现在有些大型游戏,包本身不大,但是第一次进去,需要下载很大的一个资源包。只能说是现在移动应用市场大家都为了减少包体积,而做出的一些做法。一些发行公司,渠道什么的人会说是因为包大了没人下,会导致少很多用户。但我个人并不同意,其实玩家玩你的游戏,如果他真的决定玩,并且你的游戏质量够好,我相信没人会因为你的游戏包大就放弃了。你外面下载害怕人家流失,就不怕人家进了游戏看到一个2个G的资源包要下就不流失?所以我觉得一款游戏真正能不能吸引用户还是看游戏品质~