您想找什么?
Hero background image
如何使用 Profile Analyzer 优化你的游戏
本页深入介绍了如何将 Profile Analyzer 添加到您的 Unity 和原生平台分析工具库中。在深入了解之前,请先查看本介绍指南。

配置文件分析器是电子书《Unity 游戏配置文件终极指南》中涵盖的众多功能之一。这份 70 多页的指南汇集了来自内部和外部 Unity 专家的高级知识和建议,指导您如何从头到尾分析 Unity 中的应用程序、管理其内存以及优化其功耗。

Profile Analyzer 演示

Profile Analyzer 演示

想知道在哪些方面可以提升绩效吗?您需要比较更改前后的性能吗?您是否知道 Unity 版本更新对游戏的影响?个人资料分析器将帮助您回答这些问题。

虽然标准 Unity Profiler 允许您进行单帧分析,但 Profile Analyzer 可以聚合和可视化从一组 Unity Profiler 帧中捕获的分析标记数据。

Profile Analyzer 概述

配置文件分析器可以帮助您确定应该集中精力的地方。它为您提供了一种并排比较两个 Unity 性能分析捕获的方法,并检查更改的影响。

Profile Analyzer 是对 Unity Profiler 中已有的单帧分析的补充。它聚合并可视化来自一系列 Unity Profiler 帧的帧和标记数据,以帮助您查看多个帧的高级、随时间变化的性能模式。

Profile Analyzer 对当前 Profiler 会话帧或之前保存的捕获中的多个帧进行 CPU 性能分析。该工具附带统计数据和可视化功能,可帮助您快速解析捕获中存储的信息。其 综合过滤 功能还可以让您深入了解您感兴趣的部分。您可以使用它来比较两个数据集,也可以导出原始数据以便使用其他工具进行分析。

您可以通过 窗口 > 包管理器安装 Profile Analyzer。

轮廓分析仪
开始使用

这些分析技巧可以帮助您开始使用 Profile Analyzer:

获得具有代表性且可重复的捕获。

关闭所有其他应用程序。您可以在 C# 脚本中使用Profiler.logFile直接从正在运行的游戏中写出配置文件数据,这意味着您不需要打开编辑器。它会写出一个.raw文件,您随后可以将其加载到 Unity Profiler 中。

禁用任何 CPU 硬件性能扩展或提升功能,这样您的时钟频率就不会发生变化,例如 Intel SpeedStep 或 AMD Precision Boost。

配置文件分析器可以帮助您解答项目开发生命周期中可能出现的优化和性能问题。例如,在 300 帧的游戏捕捉或 20 秒的加载序列中:

主线程和渲染线程中最大的 CPU 成本是什么?

每个标记的平均/中位数/总成本是多少?

使用配置文件分析器深入研究跨多个帧运行的代码的性能特征,甚至分析前后的不同会话捕获。

使用 Profile Analyzer 比较数据时的更多提示:

通过选择深度级别 4(深度级别显示标记在层次结构中的位置信息)深入研究用户脚本(忽略 Unity Engine API 级别)。过滤到此级别并在时间线模式下查看分析器后,您可以关联调用堆栈深度以在此处进行选择 - Monobehaviour 脚本将以蓝色显示,位于第四级。这是一种快速查看您的特定逻辑和游戏脚本是否在没有任何其他“噪音”的情况下自行运行的方法。

对于 Unity 引擎的其他区域(例如动画师或引擎物理),使用深度堆栈级别 3 以相同的方式过滤数据。

在“帧摘要”部分的右侧,您将看到突出显示的方法的性能范围直方图。将鼠标悬停在最大帧数(发现最大时间的精确帧)上以获取可点击的链接,用于查看 Unity Profiler 中的帧选择。使用此视图来分析可能导致最大帧时间过长的其他因素。

数据抓取
查看特定函数的性能

如果您想了解调用函数如何影响性能,请使用 Unity Profiler 或 Profiler.logFile 方法来捕获数据。如果您正在使用 Unity Profiler,则可以单击“拉取数据”按钮将其加载到 Profile Analyzer 中。否则,您可以从文件中加载以前保存的数据捕获。

一旦您这样做,分析就会立即开始,并且数据会填充帧时间图。注意图表中的白色和青色条​​。白色条表示帧持续时间,青色条表示当前选定的标记。这使您可以比较选定的标记对总帧时间的贡献。

您可以使用过滤器搜索标记。Marker Details 会自动更新以反映您选择的子集;在“Count”列中,您将看到它出现的次数。帧时间图将突出显示标记。当您选择一个标记时,“标记摘要”详细信息面板也会更新以显示该特定标记的分析统计数据。

代表性框架
查找有代表性的帧

在分析性能时,您要确保所查看的数据具有代表性。如果数据比较杂乱,可以使用右上角的“Frame Summary”来确保选择一个平均帧,这很容易 - 只需单击显示为“Median”的帧,Profiler 就会显示相关的分析。或者,使用帧时间图,右键单击并选择“选择中值帧”。

您还可以将分析限制在所选的帧内。您看到的所有统计数据都将更新以反映特定的选择。

您不需要依赖单个 中的单个数据点,而是可以通过选择一组代表性帧来分析多个数据点。如果右键单击帧时间图并按帧持续时间排序,则可以选择中值帧周围的一组帧作为代表性样本,以平滑数据中的部分噪音。

轮廓分析仪项目设置
更改项目设置的效果

配置文件分析器可以帮助确定应用项目范围设置(例如启用图形作业)时的性能差异。要使用该功能,请进行基准捕获,然后在作出更改后进行另一次捕获。运行您的游戏,使用 Unity Profiler 对其进行采样,将捕获的内容带入 Profile Analyzer,然后将第二个内容带入。

您可以在“帧摘要”部分并排查看两次捕获的结果。

GPU 受限
您的游戏是否为 GPU 密集型?

为了确保您的性能没有任何瓶颈,请检查主线程上的 Gfx.WaitForPresentOnGfxThread 标记。通过在过滤区域中输入 Gfx.WaitForPresentOnGfxThread 来找到它。如果该标记的中值非零,则 CPU 正在等待 GPU 完成其活动后才能继续。

您可以在帧时间图中查看该标记,以了解它对帧时间的贡献有多大。如果 CPU 正在等待 GPU,那么您很可能受到 GPU 限制。通过查看渲染线程配置文件中是否存在 Gfx.PresentFrame 或 <GraphicsAPIName>.WaitForLastPresent 标记来确认这种情况。查看我们的 《Unity 游戏分析终极指南》 电子书以获得进一步帮助,或者查看 GPU 分析工具 以了解可以在哪些方面进行优化。

轮廓分析仪
数据集管理

您可以从配置文件分析器窗口的顶部管理您的数据。从这里您可以打开 Unity Profiler,并从 Unity Profiler 中“提取数据”或加载以前保存的文件(任何 Unity 版本)。

加载数据后,您将在帧时间图中看到它。这是一个交互式区域,您可以在其中选择一系列样本;标记详细信息表中的所有摘要信息将自动更新以反映您的选择。您可以通过右键单击帧时间图来访问高级选择选项。

单击“保存”按钮将分析数据保存为 .pdata 文件。请注意,有两种文件格式类型 - Profile Analyzer 保存文件 (.pdata) 和 Profiler 保存文件 (.data 或 .raw)。我们建议将两个文件保存在同一目录中。

帧摘要
帧摘要

帧摘要(位于配置文件分析器窗口的右侧)显示帧时间的亮点,包括最小值、最大值和中值,并带有可让您跳转到配置文件器中的特定帧的按钮。该区域还显示帧时间分布直方图和箱线图。

标记表
标记表

标记详细信息

在本节中,您将找到来自 Profiler 的标记数据的标记表,其中包括所有堆栈深度。所有标记的 Unity Profiler 数据被汇总以提供中值和其他帧时间,这些数据也显示在此表中。也可以将这些细节过滤到特定的堆栈深度“切片”。

标记摘要

右侧的标记摘要区域包含有关所选标记及其对帧时间的贡献的汇总信息。该信息还以直方图和箱线图的形式直观呈现。

在摘要的底部,您将找到聚合数据集内各个标记实例的最小时间和最大时间。

过滤器
过滤器

按名字

您可以输入一个子字符串或子字符串集合,以便将您的审查重点集中在具有特定名称的标记上。如果名称包含空格,请确保用引号将子字符串引起来。

您可以排除您不感兴趣的标记。例如,您可以根据作业中的空闲时间或作为 Profiler 本身一部分的标记排除标记。

您还可以通过右键单击表中感兴趣的标记并将其添加到过滤器选择中来填充标记过滤器。

移除过滤器

您还可以选择在表格和图表中隐藏一个标记以及该标记下的所有子样本的数据。该选项主要用于消除 iOS 和 Android 设备上的 VSync/等待时间。两个常见标记已预先配置,可通过标记为 消除:没有任何。这些标记被称为 FPS WaitPresent Wait。对于更高级的用例,您可以通过从右键单击上下文菜单中选择并选择 “删除标记” 选项来删除标记。

您一次只能删除一个标记;您可以通过在下拉菜单中选择 “无” 来重新添加标记。

线程

您可以选择查看特定工作线程的数据。要查看所有聚合,请选中线程选择弹出窗口顶部的“全部”。

深度

我们建议查看深度 3,因为大多数 Unity 子系统在该级别都有高级标记。这样,您将看到关键子系统(例如渲染、动画和物理)的占比。(深度 3 适用于最新的 Unity 发行版。对于旧版本,您可能需要切换到另一个深度。)

父母

要按父级过滤,请右键单击标记表中的标记,然后选择“设置为父标记过滤器”。

分析类型

默认情况下,配置文件分析器显示标记的总时间,但您可以更改为自身时间。如果您想深入了解细节以了解您的时间真正花在了哪里,那么自我时间就很有用。

单位

默认单位是毫秒,但对于较短的时间,您可以切换到微秒。

中位帧上的前 10 个标记
中位帧上的前 10 个标记

窗口的这一部分显示您选择的过滤器的前 10 个标记。使用此工具的最佳方法是选择“主线程”和“总时间”作为分析类型,包括深度 3 的子项,以便您查看 Unity 子系统。这将为您显示每个此类关键系统的占比,例如渲染、物理、动画时间。

在比较视图中,使用 比率 下拉菜单来调整配置文件分析器如何绘制彼此的标记:

标准化显示相对于所选深度处自身时间的两个数据集。

最长显示选定深度处两组之间的绝对差。

为了进一步的报告和分析,您可以将鼠标悬停在数据栏上以查看确切的百分比和指标。

比较数据集
比较数据集

在配置文件分析器窗口的顶部,您可以切换到比较选项卡来选择两个数据集进行分析。一个数据集显示为蓝色,另一个数据显示为橙色。或者您可以选择比较单个数据集的两个子区域,例如,将中值帧与异常帧进行比较。

标记比较表以蓝色和橙色直观地表示数据,因此您可以快速检查两个数据集中哪一个在某些区域运行得较慢。

如果其中一次扫描中没有标记,您将在该列中看到一个破折号。如果标记已被重命名,则可能会发生这种情况,例如当您使用不同的 Unity 版本时。

导出数据

请记住,您可以从配置文件分析器导出数据,以 CSV 文件格式进行进一步的自定义处理。您可以导出标记表、帧时间图、比较表或帧时间图比较的内容。

如果您对 Profile Analyzer、Profiler 有任何疑问,或者不知道如何在您的项目中使用它们的特定功能,请加入 论坛讨论。

更多资源

通过在各种平台和设备上分析和磨练游戏的性能,您可以更好地规划成功并显著扩大玩家群。

正如本文开头所提到的,电子书《Unity 游戏分析终极指南》 提供了更多有关分析 Unity 项目的说明。

您还可以观看 Unite Copenhagen 的 本次会议 。它来自 2019 年,但仍然提供了有关配置文件分析器的很好的提示。

最后,在 最佳实践中心找到所有 Unity 高级指南和文章。

您喜欢本文吗?
是的!
还行。