本篇难度:★★★☆☆
请注意,单独观看本文是不太容易吸收的。正确的食用方式,是手边打开一个具体的项目,然后结合项目参考文章看看是否有能改进的地方,再对症下药。
大噶好,咱们又见面了。我们在前一篇文章中讲到了Unity性能分析工具的用法,以及在我们实际项目中所用到性能分析的思路。从这篇文章开始,我们从Unity性能优化的几个方面来逐步讲解unity中具体的优化方法和作用。
就当前的游戏优化而言,主要是围绕CPU、渲染、内存,三大方面来进行,而这三大方面又可以细分很多模块,比如在CPU中有渲染、 物理、 脚本、 GC、UI、垂直同步以及全局光照等模块。
本系列之后的文章,我们从以上三个大方向,来具体的介绍。
CPU性能优化
CPU 优化主要以性能分析为引,根据分析所得的数据,找到性能问题,以便快速并定向的优化项目。在我们之前的文章中有提到,CPU usage profiler会统计渲染、 物理、 脚本、 GC、UI、垂直同步以及全局光照等模块的 CPU 使用情况。
首先我们再了解一个工具,在我们的项目中,可以在Game视图点击stats开启Statistics窗口(渲染统计窗口),该窗口显示游戏运行时,渲染、声音、网络状况等多种统计信息,帮助我们分析游戏性能。
首先我们来了解几个概念性的问题
垂直同步
关于垂直同步的问题,我们在之前的工具篇中就有提到,想要了解的读者可以看看之前的文章,如果要深入了解,可能需要参考一些教程,在本文中就不做过多的阐述。朔宇:Unity3D性能优化——工具篇zhuanlan.zhihu.com渲染
在unity中GPU和CPU渲染也是一个很大的话题,在之后的文章中,会提到渲染问题,在这里我们只需要大致的了解什么是Batches和Draw Call。
在我们进行游戏优化时,常会听到要减少Draw Call。Draw Call实际上就是一个命令,它的发起方是CPU,接收方是GPU,这个命令仅仅会指向一个需要被渲染的图元列表,而不会再包含任何材质信息。 当给定一个Draw Call时,GPU就会根据渲染状态和所有输入的顶点数据来进行计算,最终输出成屏幕上显示的像素。
引擎每对一个物体进行一次DrawCall,就会产生一个Batch,这个Batch里包含着该物体所有的网格和顶点数据,当渲染另一个相同的物体时,引擎会直接调用Batch里的信息,将相关顶点数据直接送到GPU,从而让渲染过程更加高效,即Batching技术是将所有材质相近的物体进行合并渲染。
Batches其实就是Unity内置的Draw Call Batching
GC(垃圾回收)
在提起这个问题时,我们首先要了解一下GC。
而想要了解什么是GC我们就要考虑到unity的内存管理机制。Unity主要采用自动内存管理的机制,开发者不需要详细地告诉unity如何进