王瑾
(苏州工业职业技术学院,江苏苏州215104)
基于Unity3D手机游戏性能优化技术的研究
王瑾
(苏州工业职业技术学院,江苏苏州215104)
介绍了基于Unity3D引擎研发一款塔防游戏过程中的性能优化技术,研究分析了包括程序优化技术、优化美术资源、内存优化技术、空间瘦身优化和性能分析工具等多方面的关键技术,游戏可保持精彩美观效果且明显改善和提高了游戏的运行性能和操作体验,通过归纳总结出该游戏研发过程中对于性能优化关键部分的技术思想和方法,可以为其他Unity3D游戏开发爱好者提供一些参考。
Unity3D引擎;手机游戏;性能优化
Unity3D是一个可以用来轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型的互动内容多平台综合型游戏引擎和开发工具。流畅的游戏来自流畅的帧率,在优化过程中提升游戏的运行性能,当基本游戏功能到位时,就要确保游戏运行表现能够达标,Unity内置分析器是衡量游戏运行表现的一个基本工具,使用分析器来分析设备上的运行代码是一项实用的功能,正常情况下无法更改一些Unity底层的流程、结构和渲染策略等,但仍需通过对游戏程序与美术资源进行必要的优化,包括程序优化技术、优化美术资源、内存优化技术、空间瘦身优化和性能分析工具等多方面的关键性能技术,改善游戏的运行性能和操作体验。
按照Unity3D游戏项目的制作流程,即模型制作->创建工程->模型构建->场景构建->程序编写->测试发布,先在3DS Max建模软件中进行游戏基本模型的设计制作,如防守方的羊村武士、进攻方的灰太狼,武器道具等,导出为FXB格式文件,用PS软件设计贴图文件,导出为PNG格式。新建Unity工程SheepWar,在Asserts文件夹导入FXB和PNG等模型资源,并陆续创建Material、Model、Prefab、Scenes、Scripts等文件夹进行分类管理。设计典型的多个游戏场景和分关卡,编制必要的智能AI脚本,在游戏管理器的脚本中进行管理、链接和调试[1]。
2.1程序优化技术
首先优化代码可读性,具备良好的编码风格是程序性能优化的基础,保持脚本的良好可读性,必要的注解可以提升调试与维护时的效率,接着要优化逻辑复杂度,大部分复杂情况都与游戏本身的设计有关,要避免一些由于代码扩展或是滥用回调造成的问题,例如考虑使用数组或者容器,便是对于会产生极大代码量的switch或回归写法的最佳替代品。优化OnGUI方法可以明显提升程序性能,不要使用原生的GUI方法,避免在其中对变量、方法进行更新和赋值,输出变量建议在Update方法内,另外删除脚本中为空或不需要的默认方法,合理使用变量来提高运行效率,如脚本中频繁使用的变量就声明为全局变量,脚本之间频繁调用的变量或方法声明为全局静态变量或方法,不要频繁获取组件,将其声明为全局变量,尽量直接声明变量来代替GetComponent获取脚本,还有先建好对象池后使用Translate来“生成”对象[2]。
2.2优化美术资源
美术资源对于程序发布包大小、性能优化、内存占用量的影响往往超过其他因素,通过对美术资源进行优化,可明显提高运行效率。通过共享游戏对象的材料,令其在Unity中处于静止状态,将它们绑定在一起,由此产生的简化绘图调用是呈现良好移动运行性能的重要元素;合并使用同贴图的材质球、相同材质球的网格,纹理地图集对UI元素,使用合理的纹理MIP标准,移除所有远处背景的网格,减小很耗性能的实时阴影,让不同角色共享动画,在一些关口移除额外顶点。养成良好的标签、层次和图层的条理化习惯,将不同的对象置于不同的标签或图层,三者有效结合能够方便地按名称、类别和属性进行查找,平衡美学与性能进行优化粒子效果,减少发射器数量并尽量减少透明度的需求。
2.3内存优化技术
Unity3D在内存占用上一直被人诟病,特别是对于移动设备上的游戏,动辄内存占用一两百兆字节,容易耗尽内存资源被系统强行退出造成极差的体验。虽然Unity标榜自己的内存使用是托管的,但事实上用户必须正确地使用内存,以保证回收机制正确运行,遵循使用原则可以让非必要的资源尽快得到释放,从而降低内存占用。灵活使用Unity3D里的两种动态加载机制Resources.Load或AssetBundle,可以有效地动态加载调用资源,在资源不再使用的时候及时销毁和释放资源。
正确使用“垃圾回收器”(GC),确保自动清理不用的内存,分析器经常显示CPU负荷过大的原因是GC正在收集垃圾内存,避免手动GC因为会导致本帧渲染耗费时间以几何倍数形式上升,需要避免内存碎片产生。尽量使用for代替foreach,使用StringBuilder或string.format代替string的+=操作字符串拼接,如果一次运算量过大,可以分帧进行处理迭代运算,不要把所有运算放在同一帧,例如寻路算法、遗传算法等,尽量使用“尾调用”来减少使用中间变量的方式来返回结果。
2.4空间瘦身优化
手机上运行的游戏产品需要考虑自身的精简,尽可能压缩游戏所需空间,包括控制游戏文件大小、运行时资源空间占用等方面。优化美术资源可以很好地实现对游戏文件大小的控制,可以优化几何体模型,而在3D建模时尽可能减少模型中三角形的数量,对于模型没有影响或肉眼难察觉到区别的顶点都要尽可能去掉,并且在三维建模软件中尽可能重用顶点,压缩模型的Mesh,并积极减少纹理大小,使用Texture Atlas可以帮助减少Draw Calls,考虑纹理的长宽比最好是1比1,长度值最好是2的整数幂,这样可以达到最佳优化效果。使用Unity3D批处理技术进行压缩,尽量使用同一个材质的物体,动态和静态批处理之间的不同在于顶点数据的差别和使用网格不同,把这些顶点数据合并后再发送给CPU就可完成批处理,可节省很多资源的开销。
2.5性能分析工具
Unity3D提供了强大且易用的性能分析器(Profiler),该分析器用于帮助优化游戏的性能,分析游戏在多个维度花费的时间,如渲染、动画或逻辑花费时间的百分比。在分析器编辑器中,记录着游戏运行每个帧的数据,单击某个帧将在窗口下部显示详细信息,当前选择的时间线区域不同从而显示的细节也有所不同,时间线的垂直比例尺采用自动管理,并尝试填充窗口的垂直空间。若要获得CPU使用率区域等更多细节,可删除内存和渲染区域,时间线和统计区域间的区隔线也可进行选定,向下拖动以增加时间线图表使用的屏幕面积,时间线包含CPU使用率、渲染和内存,单击面板上的关闭按钮移除这些区域,分析控制栏上的添加区域下拉列表来重新添加,标签区域的彩色方块控制是否显示关联的时间线。
分析时调整脚本代码会对游戏性能有小小影响,通常这种开销较小,不太会影响游戏的帧率,重点分析游戏消耗时间最多的那些部分,比较分析代码更改前后的数据结果,灵活应用Unity分析器为开发中的游戏进行体检,通过Profiler.BeginSample和Profiler.EndSample等来自定义检查范围,关注调试CPU、内存使用率、音频、渲染等的变化,实现游戏的性能优化[3]。
本文概述了《保卫羊村》塔防游戏过程中的性能优化技术和方法,研究和分析了包括程序优化技术、优化美术资源、内存优化技术、空间瘦身优化和性能分析工具等多方面的关键技术,游戏可保持精彩美观效果且明显改善和提高了游戏的运行性能和操作体验,Unity3D游戏的性能优化是进阶阶段,仍然有很多高级的实用技术需要更深入的学习和研究,这些将在后续的项目实践中继续进行提炼和总结。
[1]优美缔软件上海有限公司.Unity官方案例精讲[M].北京:中国铁道出版社,2015.
[2]优美缔软件上海有限公司.Unity 4.X从入门到精通[M].北京:中国铁道出版社,2013.
[3]金玺曾.Unity3D手机游戏开发[M].北京:清华大学出版社,2013.
(编辑:姚欢)
Research of Performance Optimizing Technologies for Designing Mobile Game based on Unity3D
Wang Jin
(Suzhou Institute of Industrial Technology,Suzhou Jiangsu 215104)
This article describes the performance optimizing technologies during the design and development of a tower defense game based on Unity3D engine,briefly researches on optimization technologies of unity programming,art resources,memory,space and performance analysis tools,which significantly improves and enhances the game's performance and operating experience while maintaining excellent aesthetic effect.The summarized key technologies and methods of performance optimizing provide a good reference for other game developers.
Unity3D engine;mobile games;performance optimization
G898
A
2095-0748(2015)22-0094-03
10.16525/j.cnki.14-1362/n.2015.22.42
2015-11-02
王瑾(1981—),女,江苏泰州人,硕士,讲师,从事Web前端设计、动画制作、计算机技术研究。