前言
在游戏开发过程中遇到刷新界面卡顿等现象,决定学习一下Unity相关的优化工作。首先要做的就是了解Unity相应的性能测试工具以找到性能的瓶颈。依据U3D官方文档和google上的一些文档,熟悉相关的性能测试工具。
Profiler window
U3D内置的性能分析器,可以分析游戏中各个模块相应的性能,找出性能瓶颈并修复相应问题.
profiler的工具条可以控制Profiler的相关显示操作。可以通过Add Profiler
来添加相应的监测窗口。Record
为是否显示性能分析数据。Deep Profile
开启时,所有的函数调用都将会被检测,这在调试关键性能代码时十分有用。⚠开启时会造成巨大开销,可能造成内存耗尽。
同时,你也可以使用Profile.BeginSample
和Profile.EndSample
来手动检测代码性能。
Profiler.BeginSample ("testProfilerSample");
for (int i = 0; i < 1000; i++)
{
testString.Append (i);
if(i == 999)
{
Debug.Log(testString);
}
}
Profiler.EndSample ();
之后就可以在Profiler Window中通过testProfilerSample标签来查看相应代码的性能分析,需要注意的是:只有在相应帧上才可以观察到。
Profiler有几个不同的分析监测部分:
-
CPU
- Scripts
- Rendering
- Phsics
- GC
- VSync
- GI
- Others
- Rendering
- Scripts
- Texture Memory
- GC
- Material Count
- Memory
- Others
通过Profiler窗口可以观察到每一帧当中,相应操作所消耗的时间。首先简单了解一下帧率(Frame Rate),帧率即是图像渲染到屏幕上的速度,单位是FPS。而当我们在检测游戏性能时,需要关注每一帧所消耗的时间(ms),才能够更加准确的测量并改进相关的游戏性能,同时也可以更加精准的找到每一帧当中不同函数所消耗的具体时间。
例如,通过CPU监视窗口可以观察到一帧当中脚本、GC和VSync等所消耗的时间,找到性能瓶颈。
不同部位的性能分析通过不同的颜色显示,可以点击以开关,拖拽以排列显示顺序。同时,在Hierarchy窗口中,可以通过点击工作条中不同的信息(如Time ms),来切换信息排列方式。
其中,WaitForTargetFPS是当帧率快于屏幕刷新率或设定的帧率值时等待的耗费时间。参考这篇文章可以帮助更好的理解WaitForTargetFPSGfx.WaitForPresent和 Graphics.PresentAndSync。
Timeline View是另一种观测试图。可以更好的了解CPU任务的排列顺序和负责相应任务的线程。
在Rendering窗口中,显示的是Unity实时渲染状态,同时在Unity的Game窗口右上角也有一个类似的stats状态信息可以查看。
信息包含有:
- FPS
- Batches
- Tris/Verts
- 等等
其中,Batches和setPass calls为批处理数量和pass数量,数量过大会引起CPU占用率过高,可以查看Unity官方手册 做进一步了解。
总结
通过学习了解U3D的Profiler相关信息,了解如何使用自带的性能分析器分析游戏的相关瓶颈点,之后可以采取不同的性能优化策略,如减少GC、优化DrawCall和GPU的相关优化。