《战国跑酷》包体优化过程总结-新闻详情

《战国跑酷》包体优化过程总结


发布时间:2016-03-18责任编辑:朱明 浏览:2715


QQ图片20160317105541.jpg

2月14日,我们的游戏《战国跑酷》在AppStore上线后,在详情页中显示的大小突破了恐怖的300MB。要知道,大如《天天酷跑3D》这种规模的游戏,不过才260MB左右,到底是什么原因让游戏的包体达到如此巨大的程度呢?

    通过在网上的一番搜索,我们找到了一篇描述游戏应用在提交AppStore后包体大小急增的文章。文章中的矛头指向了Xcode,分析是因为Xcode7.0版本新增的一些功能会导致应用体积的膨胀,而我们恰恰使用的是Xcode7系列的版本。于是用低版本的Xcode出包,就是我们首先采取的措施。但令我们失望的是,我们的游戏在使用较低版本的Xcode出包后,包体大小的变化并不明显,依然徘徊在接近300MB的水平。

QQ图片20160317105548.jpg

    所以,我们只能从自身来找原因——对游戏进行拆包分析,以明确包体中的资源占用情况。针对游戏的包体,我们与几款同类产品做了对比,对比的项目包括IPA包大小,它代表了游戏安装包的大小,这是一个经过压缩后的数值;解压文件大小,它代表了游戏安装后占用的空间大小,这是资源解压后的数值;程序集大小,它代表了应用中代码类资源占用的大小;Data文件大小,它代表了游戏资源(UI、模型、贴图等)占用空间的大小,这是解压后的数值;详情页大小,也就是在手机中显示的大小。具体的数据对比如下表所示:

QQ图片20160318130301.png                       

    通过对比发现,只有我们的跑酷,解压文件与IPA文件大小相差了近4倍,其他几款游戏这两个数值的差距并没有这么大。而在解压文件中,Data文件占了一大部分。对它的分析势在必行。         

将IPA包解压,找到解压目录下面的Data文件夹,它包含了游戏中使用的所有资源,如UI、模型、贴图、音频、视频等。在Data文件夹下,一个后缀名为assets的文件引起了我们的注意,因为它自己的大小就接近200MB,它里面究竟是什么内容,这强烈地激起了我们的好奇心。通过查阅资料,我们知道了*.assets文件,是经过Unity打包处理后的资源文件,一般项目中会有多个。既然已经锁定了是资源,通过使用Unity Studio这款第三方工具,我们对assets资源文件的内容进行了查看,并将打包后的资源重新进行了导出,来逐一对比各种资源文件的大小。最终,我们找到了导致游戏包体膨胀的根源所在——UI图集。

QQ图片20160317105607.jpg 

    UI图集,是经过Unity打包处理后的UI元素的集合。Unity将我们在游戏中使用的众多UI元素(sprite),按照我们预先进行的设置,像拼图一样,创建出由一个个UI元素整合而成的图片文件,也就是我们的图集(atlas)。图集采用DDS格式存储,DDS是Direct Draw Surface的缩写,由NVIDIA公司开发,大部分3D游戏引擎都可以使用DDS格式的图片用作贴图。DDS图片文件,它的特点是文件大小只与图片的尺寸和是否具有透明通道有关,而与图片的质量无关。所以,相同尺寸的图集文件,只要带有透明通道,它们的大小就是一样的;同样,在尺寸相同的前提下,不带透明通道的图集文件,它们的大小也是一样的,而与它们实际显示的内容没有关系!下面列出的DDS文件,就是我们游戏中使用的图集文件,它们真的太大了,具体如下图所示:

zgpk.png

    单是这几个图集文件,大小就达到了176MB。通过查看图集内容,最终确定了我们的失误在于只压缩了UI图片的质量,而没有控制UI图片的尺寸。殊不知因为DDS文件的特点,压缩UI图片的质量对于减少图集大小没有任何帮助,然而我们放纵了的UI图片尺寸,却让生成的DDS文件体积剧增。既然找到了这个原因,我们就对症下药,压缩UI元素的尺寸,并尽可能的提高复用率,还将开场动画由UI图片换成了视频。经过处理,游戏的包体控制在了80MB左右的水平,这算是一个比较正常的大小了。

    通过这次包体优化的分析,我们对于包体的结构以及UI元素的使用等内容有了一个更为清晰的认识。这对于游戏的优化会带来很好的帮助。希望我们的游戏,能做的更好。

 

                                                                    光域工作室