Unity3D 官方移动游戏优化指南2.性能分析

Posted Kaitiren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D 官方移动游戏优化指南2.性能分析相关的知识,希望对你有一定的参考价值。

Unity Profiler 可帮助检测运行时出现任何延迟或冻结的原因,或帮助了解特定帧(时间点)发生了什么。默认启用 CPU 和内存跟踪。如果对游戏有特定需求(例如,大量使用物理系统或基于音乐的游戏玩法),可以监控其他性能分析器模块,如渲染器、音频、物理系统等。

通过选中 Development Build 和 Autoconnect Profiler 来针对设备构建应用程序,或手动连接以加快应用程序启动速度。

选择要分析的目标。Record 按钮会跟踪应用程序运行几秒钟( 默认为 300 帧)。如果需要捕获更长时间, 请转到 Unity > Preferences > Analysis > Profiler > Frame Count 增大该值(最高可调整到 2000)。这意味着 Unity 编辑器必须执行更多的 CPU 工作、占用更多内存,但根据特定场景,这可能会很有用。

 

使用 Timeline 视图确定应用程序受 CPU 限制还是受 GPU 限制。

这是一种基于 instrumentation 的性能分析器,它分析显式包装在 ProfileMarkers 中的代码时序(例如 Monobehaviour 的 Start 或 Update 方法,或特定的 API 调用)。此外,当使用深度性能分析设置时,Unity 可以分析脚本代码中每个函数调用的开始和结束,以准确告诉您应用程序的哪一部分导致运行速度变慢(但这会带来额外的开销)。

在对游戏进行性能分析时,我们建议您涵盖游戏的尖峰和平均帧开销。了解和优化每一帧执行的高开销操作,对运行帧率低于目标帧率的应用程序更有用。在寻找尖峰时,首先探索高开销操作(例如,物理系统、AI、动画)和垃圾收集。

在窗口中单击来分析特定帧。然后,使用 Timeline 或 Hierarchy 视图 :

  • Hierarchy 显示分组到一起的 ProfileMarkers 的层次结构。这让您可以基于时间成本(以毫秒为单位,Time ms 和 Self ms)对样本进行排序。您还可以计算该帧中函数的调用次数和托管堆内存 (GC Alloc)。
  • Timeline 显示特定帧时间的可视化明细。这让您可以直观了解活动之间以及跨不同线程的关系。使用它可以确定应用程序受 CPU 限制还是受 GPU 限制。

Hierarchy 视图可按时间成本对 ProfileMarkers 进行排序。

有关 Unity Profiler 的完整概述,请单击此处。对于刚刚接触性能分析的人士,也可以观看 Unity 性能分析简介

在优化项目中的任何内容之前,请先保存 Profiler .data 文件。然后实施更改,并比较修改前后保存的 .data。按照“分析、优化和比较”的方式来提高性能。反复进行这一过程。

及早并经常进行性能分析

Unity Profiler 可提供关于应用程序的性能信息,但如果您不使用它,它也帮不了您。请在开发早期对项目进行性能分析,而不仅仅是在即将发布时。一旦出现问题或尖峰,立即展开调查。为项目开发一个“性能签名 (performance signature)”,将能够更轻松地发现新问题。

不要盲目优化

不要猜测或假设是什么拖累了游戏性能。使用 Unity Profiler 和特定平台的工具找出导致延迟的具体原因。

此外,并非本指南中介绍的所有优化都适用于您的应用程序。在别的项目中具有良好效果的措施可能对您的项目不起作用。找出真正的瓶颈,然后集中精力解决问题。

在目标设备上进行性能分析

虽然在编辑器中进行性能分析可以非常粗略地了解游戏中不同系统的相对性能,但什么也比不上在真机上进行性能分析。尽可能在目标设备上对开发构建版本进行性能分析。记住,请针对计划支持的最低规格的设备进行性能分析和优化。

仅仅依靠 Unity Profiler 无法了解引擎的每一个部分。幸运的是,iosandroid 都包含可帮助您测试性能的原生工具 :

某些硬件还可以利用其他性能分析工具(例如 Arm Mobile StudioIntel VTune 和 Snapdragon Profiler)。有关更多信息,请参阅对使用 Unity 创建的应用程序进行性能分析

使用 Profile Analyzer

通过该工具,可以聚合多个 Profiler 数据帧,然后找到感兴趣的帧。想在对项目做出更改后查看 Profiler 有何变化? Compare 视图允许您加载和比较两个数据集,这对于测试更改结果是否有所改进至关重要。可通过 Unity Package Manager 获取 Profile Analyzer

 需要更深入地了解帧和标记数据? Profile Analyzer 可弥补现有 Profiler 之不足。

满足每帧的特定时间预算要求

根据每秒目标帧数 (fps),每一帧都有时间预算。理想情况下,以 30 fps 运行的应用程序允许每帧用时约 33.33 ms (1000 ms/30 fps)。如果目标为 60 fps,则每帧用时上限为 16.66 ms。

但是,对于移动设备,不能始终使用这么长时间,否则设备会过热,操作系统会对 CPU 和 GPU 进行热节流。我们建议只使用约 65% 的可用时间,以便在帧之间留出冷却时间。目标为 30 fps 时,典型的帧预算为每帧约 22 ms,60 fps 时为 11 ms 左右。

设备可以在短时间内超出该标准(例如,过场动画或加载序列),但不能长时间超标。

确定应用程序受GPU 限制 (GPU-bound) 还是受 CPU 限制 (CPU-bound)

Profiler 可以告诉您 :罪魁祸首是 CPU 耗时超出了分配的帧预算,还是在于 GPU。

如果看到 Gfx.WaitForCommands 标记,说明渲染线程已准备就绪,但可能正在等待主线程上的某个瓶颈。

如果经常遇到 Gfx.WaitForPresent,说明主线程已准备就绪,但正在等待 GPU 渲染帧。

考虑设备温度

大多数移动设备不像台式机那样具有主动冷却功能。物理热量水平会直接影响性能。

如果设备运行得很热,即使没有导致问题,Profiler 也可能报告性能不佳。请在短时间内进行性能分析,以保持设备凉爽和模拟真实世界的情况,从而应对性能分析产生的开销。

在最低规格设备上进行测试

市面上有各种各样的 iOS 和 Android 设备。请在希望应用程序支持的最低规格的设备上测试项目。

以上是关于Unity3D 官方移动游戏优化指南2.性能分析的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D 官方移动游戏优化指南6.项目配置

Unity3D 官方移动游戏优化指南6.项目配置

Unity3D 官方移动游戏优化指南5.编程和代码架构

Unity3D 官方移动游戏优化指南5.编程和代码架构

Unity3D 官方移动游戏优化指南10.音频

Unity3D 官方移动游戏优化指南7.资源