Original
2016-11-23
Unity官方
Unity官方平台
Unity全球企业级支持团队来到巨人网络,对《球球大作战》这个游戏项目进行了为期两天的现场Project Review,并针对其中一些问题提出了多种不同的解决方案。
今天这篇文章,将以《球球大作战》的Project Review为中心,分享一些大家可能都适用的项目优化经验及技巧。
《球球大作战》是基于Unity 4.x开发的项目。巨人开发团队对Unity 5.x的新特性非常向往。比如内存分析工具Memory Profiler可以直观地查找内存中的冗余资源,渲染分析工具Frame Debugger可以方便查看渲染瓶颈等等。另外考虑到4.x停止维护后,对长期运营的项目而言,潜在的不可控风险越来越大。比如新设备或新操作系统的支持等等。 因此巨人开发团队很早就开始考察4.x升级到5.x的可行性。经过一段时间的考察,团队发现升级的风险是可以控制的,而升级会带来的提升令人心动,于是团队准备全面升级到Unity 5.x。对于升级中遇到的问题,巨人团队和Unity全球企业级支持团队紧密合作,通过邮件、电话、现场支持及Project Review等方式来解决。 开发团队在从Unity 4.x升级至5.3.x的过程中,遇到最大的瓶颈就是Transform的性能问题。升级后游戏整体的帧率提高了,但偶尔会出现一些卡顿,导致帧率不稳定。
Transform对于一般游戏来说不会造成性能瓶颈,但由于《球球大作战》要对大量的球球进行同屏渲染,最多有2000个粮食,30个刺,200个角色及大量球体需要同时渲染,有大量高频度的Transform设置操作,所以问题被放大并最终影响了性能。 这个问题在Unity 5.4.2版本中得到了明显优化,另外未来的版本也会完全改写Transform,通过Unity新的C# Job System进行进一步优化,使Transform的性能达到一个新的水平。
《球球大作战》使用了第三方的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文件夹的管理方式,导致在加载特定资源时也需要比较长的时间。所以Unity建议大家尽量避免使用Resources来管理资源。 Project Review是Unity全球企业级支持服务的一部分。Project Review会针对一个项目做全面而深入的分析,从而帮助开发团队找到项目在资源使用、运行时性能等方面的问题,并给出一套完整的解决方案或详细修改意见。 整个Project Review是由Unity官方全球企业支持团队入驻项目现场,进行为期两天的现场工作。内容一般包括: 关于《球球大作战》的Project Review经验就暂时为大家分享到这里,另外Unity也建议大家善用自带的分析工具Profiler,并尽量结合Xcode的Instruments工具,在iOS上进行真机调试与分析。