破解|破解技术难题,Unity官方性能优化和企业服务是如何工作的?

11 月 16 –20 日,中国 Unity 线上技术大会以直播形式召开,为广大开发者带来了一场有关前沿技术和优秀案例的线上盛会。在11月18日的游戏专场中,Unity大中华区技术总监张黎明为广大开发者详细介绍了Unity引擎的详细信息,性能优化以及企业服务。
破解|破解技术难题,Unity官方性能优化和企业服务是如何工作的?
文章插图
以下是演讲实录:
张黎明:大家好,我是今晚主题演讲嘉宾Unity张黎明。我在Unity中国是负责企业技术支持以及解决方案这方面的工作。今天给大家分享的题目是Unity性能优化以及企业服务。性能优化对于所有游戏的开发者来说是一个千古不变的话题,过去几乎每一年Unite大会上我们都会有类似的主题分享性能方面的经验。
今天的内容和过去有类似的地方,也是先介绍一下我们过去做性能优化常见优化的流程。这次的分享最大的区别是我会在这里介绍我们不久前刚推出UPR线上的性能优化和服务平台。最后我会给大家介绍我们面向中国客户提供企业支持服务的内容。
这里简单先说一下我们为客户提供的一种性能优化服务内容,我们叫做Project Review。简单介绍来说,我们会有Unity官方技术专家来到客户现场做性能分析的服务。第二部分就是讲我们现在一个自动化的线上性能分析的平台UPR,最后是企业服务。
破解|破解技术难题,Unity官方性能优化和企业服务是如何工作的?
文章插图
首先看一下什么是Project Review。Project Review过去主要是针对上线前的游戏经常会遇到各种卡顿,帧率低或者是游戏体验不好甚至是崩溃的情况,我们提供了现场支持的服务。我们Unity官方的专家会到客户办公室现场使用各种工具来分析他们的工程,然后找到这个游戏的性能瓶颈,在两天结束之后,我们会写一个完整的性能优化报告,通过文档的形式交给客户,告诉他们游戏里面存在哪些瓶颈,通过哪些方向的改进可以解决这些瓶颈。
在Project Review的流程之前我们先有一个项目沟通的阶段,我们会提前问一下客户这是什么类型的游戏,团队的规模,团队成员的游戏开发经验是怎样的,以及目前已知的性能问题可能有哪些,这样会帮助我们减少一些现场所花的时间。
沟通完之后,我们会预约一个时间,让我们工程师到现场,主要是做以下的这么几部分工作:
破解|破解技术难题,Unity官方性能优化和企业服务是如何工作的?
文章插图
首先,我们会有差不多半天的时间去做资源检查。因为常见的一些性能问题经常是因为美术资源的导入设置得不合理,从而导致各种各样的性能的问题。我们会在Unity Editor里面通过人工的方式检查各种资源的导入设置有没有不合理的地方,然后会把它写到文档里面。
后面我会介绍我们线上的性能优化服务,这个工具是怎么样解决我们过去很多人工繁琐的工作。
当然第一部分还是先介绍我们人工是怎么做的。除了做资源检查以外,我们一般在第一天的下午就开始使用Unity工具来做性能分析,其中主要是会用Unity Editor里面自带的Unity Profiler以及Memory Profiler做各种CPU、内存的性能分析。第二天是我们会用一些第三方的工具,最常用的是苹果Xcode里面的Instrument,后面我也会详细地介绍一下这些工具各自的特点。
我们在做Project Review的时候常见的问题,最常见的首先是美术资源。如果美术资源制作的不合理或者是在Unity里面设置的参数不合理,就需要通过人工或者辅助工具进行检查。另外,我们经常遇到有可能CPU耗时过高导致的卡顿,比如加载一个资源的时候,这个资源比较大,有可能导致整个游戏有一定的卡顿。
破解|破解技术难题,Unity官方性能优化和企业服务是如何工作的?
文章插图
如果GPU耗时比较多,经常会导致整个游戏的帧率下降,整个游戏运行不流畅。
另外,比较常见的就是gc allocate如果使用得比较多,就会经常导致GC的垃圾回收导致的卡顿。另外,可能还会有内存泄露等等各方面的问题。
所以说我们后面就会用一系列的工具在Project Review里面解决这些问题。首先导入设置的话我们基本上要把常见的美术资源全部做完整的检查,比如说模型的导入设置,贴图的导入设置,音频的导入设置和动画的导入设置等等。但是因为现在游戏的工程越来越大,我们在Project Review里很难做到对所有的资源进行完整的检查。所以我们后面才会在UPR线上的性能分析工具里面提供一些自动化的方案。
破解|破解技术难题,Unity官方性能优化和企业服务是如何工作的?
文章插图
做完了资源的检查之后,我们开始用Unity官方自带的Profiler工具先进行分析。Unity Profiler最常见的使用的场景是用它来分析游戏里面的卡顿,你在玩的时候有一帧很卡的话,你可以在Profiler里面找到这一帧,一般它会有一个峰值,我找到它的峰值就可以看到这一帧之内所有函数的消耗,从高到低做排序,我们就可以检查哪个函数导致的耗时过高,然后去优化这一部分。