UPL2——Unity Profiler

Unity Profiler

Profiler 记录应用程序性能的多个方面并显示相关信息。使用此信息可以做出有关应用程序中可能需要优化的事项的明智决策,并确认所做的优化是否产生预期结果。

默认情况下,Profiler 会记录并保存游戏最近的 300 帧,并向您显示每帧的详细信息。您可以在“首选项”窗口(菜单:编辑 > 首选项)中增加其记录的帧数,最多可增加到 2000 帧。
注意:如果将此设置增加到较大的帧数,Profiler 的开销和内存使用量可能会显著增加,从而对性能产生更大影响。

可以检查脚本代码,以及应用程序如何使用某些资源(这可能会降低应用程序速度)。还可以比较应用程序在不同设备上的性能。
性能分析器具有几个不同的性能分析器模块,这些模块可以添加到性能分析会话中,从而获取有关渲染、内存和音频等方面的更多信息。

如何打开性能分析器窗口

Window ——> Analysis ——> Profiler 或 Profiler(Standalone Process)

image

了解两种分析器窗口的区别

  • Profiler:

    内嵌在 Unity 编辑器中的性能分析工具,默认使用,方便调试
    它同属 Unity Editor 进程,会对游戏性能造成一定干扰(特别是深度采样或低端设备)
    更适合日常开发调试、小项目、局部功能分析

  • Profiler (Standalone Process):

    独立运行的分析器,可最大限度减少对被分析游戏的性能干扰,更适合真实测试
    更适合复杂场景、大型项目、真机性能分析

image

Profiler 窗口中的各模块

  • 顶部页签
  • CPU Usage 模块(每一帧 CPU 所花费的时间,按类别详细划分不同系统的消耗情况)
  • GPU Usage 模块(分析 GPU 在一帧中在哪些渲染阶段上花了多少时间)
  • Rendering 模块(查看一帧渲染时的数据量,例如一帧内 Drawcall 数量,合批数量,提交的三角面和顶点数量等等)
  • Memory 模块(查看一帧内存占用量粗略数据,可以看到这一帧不同类型的数据各自占用了多少内存,开发中持续观察性能)
  • Memory Profiler Package(可以在某一帧拍摄内存快照,详细分析各种类型的数据占用了多少内存,精细到对象引用关系、类型大小、堆分布等,排查具体内存泄漏 / 激增问题)
  • Audio 模块(分析和监控音频系统的性能表现,包括音频播放、混音、音量、CPU 占用等关键信息)
  • Video 模块(分析游戏中视频播放性能和资源使用情况,排查和视频相关的问题)
  • Physics 模块(监控 3D 物理系统运行状态与性能开销,涵盖 Rigidbody​、Collider、碰撞检测、物理查询等运行时数据,排查 3D 物理相关问题)
  • Physics 2D 模块(分析和排查 2D 物理系统的性能与行为,排查 2D 物理相关问题)
  • UI 和 UI Details 模块(分析和优化 Unity 中 UI 系统性能)
  • Realtime GI 模块(实时全局光照)
  • Virtual Texturing 模块(虚拟纹理)
  • File Access 模块(文件访问)
  • Asset Loading 模块(资源加载)

为何要学习 Profiler

当我们的项目出现性能问题时,我们一定不能凭感觉去解决问题!
这些性能分析工具可以帮助我们:定位问题!发现问题!解决问题!
因为问题的本质就是数据的异常,通过这些性能分析工具,我们可以非常直观的发现异常数据(问题)出现在哪个模块从而发现并定位问题,并根据具体异常的数据制定解决方案

比如:

  • 是什么造成的CPU、GPU消耗高了,让游戏出现卡顿问题
  • 是什么造成内存占用过大,让游戏出现闪退问题

等等

因此之所以要学习他们,就是因为性能分析工具可以提升我们解决问题的效率!也就提升了开发效率!

使用时的注意事项

  1. 应该在性能出现问题时再针对问题去进行分析处理

    避免盲目优化,关注实际体验问题

  2. 应该尽量在真机上进行测试分析

    编辑器与真机表现差异大,尤其在移动端、IL2CPP、GPU 方面

  3. 确保使用 Development Build 并启用 Profiler 相关选项

    这样我们才能利用性能分析工具进行真机调试

    image

  4. 分模块逐一排查

    从CPU、GPU、内存等多方面进行分析排查

  5. 限定具体场景、操作步骤、时间段逐步排查

    避免太过全局的排查,无法定位问题

  6. 避免在 Profiler(分析器) 开启下得出过度结论

    Profiler 本身有性能开销,可用 Profiler (Standalone Process) 进行更准确分析