Unity全球企业级支持团队来到巨人网络,对《球球大作战》这个游戏项目进行了为期两天的现场Project Review,并针对其中一些问题提出了多种不同的解决方案。今天这篇文章,将以《球球大作战》的Project Review为中心,分享一些大家可能都适用的项目优化经验及技巧。

关于《球球大作战》

这是一款全新休闲玩法的“小”游戏,最初于2015年5月上线App Store,一年多的时间注册用户已突破1.7亿,并且日活跃用户数高达1650万。

之所以说《球球大作战》是一款“小”游戏,是因为从游戏玩法上来说,它真的非常简单。玩家只需一根手指控制自己的小球去吃其它的小球,同时避免被其它玩家吃掉即可。
 

 


但由于游戏加入了丰富的社交模式,支持即时语音对话,且面向全球所有玩家,所以它比休闲游戏粘度更大,又比重度游戏更容易上手。同时搭配线下竞技的模式,吸引到了越来越多的忠实玩家。

项目难点与经验分享

升级至Unity 5.x版本
《球球大作战》是基于Unity 4.x开发的项目。巨人开发团队对Unity 5.x的新特性非常向往。比如内存分析工具Memory Profiler可以直观地查找内存中的冗余资源,渲染分析工具Frame Debugger可以方便查看渲染瓶颈等等。另外考虑到4.x停止维护后,对长期运营的项目而言,潜在的不可控风险越来越大。比如新设备或新操作系统的支持等等。

所以巨人开发团队很早就开始考察4.x升级到5.x的可行性。经过一段时间的考察,团队发现升级的风险是可以控制的,同时升级会带来的提升是令人兴奋的。于是团队准备全面升级到Unity 5.x。对于升级中遇到的问题,巨人团队和Unity全球企业级支持团队紧密合作,通过邮件、电话、现场支持及Project Review等方式来解决。

Transform性能问题
开发团队在从Unity 4.x升级至5.3.x的过程中,遇到最大的瓶颈就是Transform的性能问题。升级后游戏整体的帧率提高了,但偶尔会出现一些卡顿,导致帧率不稳定。
 


Transform对于一般游戏来说不会造成性能瓶颈,但由于《球球大作战》要对大量的球球进行同屏渲染,最多有2000个粮食,30个刺,200个角色及大量球体需要同时渲染,有大量高频度的Transform设置操作,所以问题被放大并最终影响了性能。

这个问题在Unity 5.4.2版本中得到了明显优化,另外未来的版本也会完全改写Transform,通过Unity新的C# Job System进行进一步优化,使Transform的性能达到一个新的水平。

UI插件产生GC
 


《球球大作战》使用了第三方的UI插件。在Project Review过程中发现该插件每帧都会产生大量的GC,在UI量比较大的情况下,对性能有明显的影响。同时由于《球球大作战》项目的特性,在运行时会有大量的移动UI,从而使这个问题被进一步放大。而使用Unity原生的UGUI可以有效避免这个问题。鉴于此,《球球大作战》团队在后续版本中会逐渐使用UGUI替代现有UI系统。

资源管理问题
在Project Review过程中发现,《球球大作战》项目中有很多资源的导入设置不够优化。对此我们也向大家提供普适性的纹理及资源属性设置:

  • 尽量Disable贴图的Read/Write属性,开启该属性会导致上传GPU贴图后,还会在内存里保留一份,增加内存开销。
  • 对2D对象尽量Disable贴图的Mipmaps属性,开启该属性会在导入纹理时生成额外的Mipmaps,同时也浪费内存。
  • 尽量不要在Unity中Resize贴图。导入Unity之前就把所有图片处理为2的整数次幂的大小。
  • 音频使用格式分不同平台不同格式,减少运行时的解析。例如:iOS 使用 MP3格式,Android 平台使用 Vorbis等。



Resources文件夹使用问题
《球球大作战》项目大量使用Resources文件夹来管理资源,这样不仅导致游戏的启动时间变长,而且由于Resources文件夹的管理方式,导致在加载特定资源时也需要比较长的时间。所以Unity建议大家尽量避免使用Resources来管理资源。

关于Project Review

Project Review是Unity全球企业级支持服务的一部分。Project Review会针对一个项目做全面而深入的分析,从而帮助开发团队找到项目在资源使用、运行时性能等方面的问题,并给出一套完整的解决方案或详细修改意见。

整个Project Review是由Unity官方全球企业支持团队入驻项目现场,进行为期两天的现场工作。内容一般包括:

  • 游戏启动时间分析
  • 关卡/场景/资源 加载时间分析
  • 游戏过程中GPU&CPU性能分析
  • 内存使用情况分析
  • Asset Bundle和序列化分析
  • Il2cpp, 代码剪裁和binary大小优化
  • Asset审查自动化
  • UGUI性能分析



关于《球球大作战》的Project Review经验就暂时为大家分享到这里,另外Unity也建议大家善用自带的分析工具Profiler,并尽量结合Xcode的Instruments工具,在iOS上进行真机调试与分析。

锐亚教育