本指南介绍如何使用 Unity 插件记录和上传来自 **Unity 2017.4 或更高版本** 的帧时间数据。
对于使用 C 或 C++ 的游戏引擎,请参阅 原生游戏引擎指南。
背景
游戏体验的关键组成部分是渲染性能。渲染性能是以下两个输入的结果
- 帧率:绘制帧的频率。
- 图形质量设置:呈现帧的保真度级别,包括模拟保真度和图形。
对于游戏,良好的渲染性能定义如下
- 提供稳定、一致的帧率(即以所需频率渲染的帧的百分比)。
- 以尽可能高的频率渲染帧,同时保持稳定性,通常取决于游戏类型为 30 或 60 FPS。
- 在仍然达到所需稳定帧率的情况下,根据用户的屏幕尺寸和密度最大化用户的细节级别。
Android 帧速率调整库 限制了帧时间的大部分变化,为游戏提供了稳定的帧率。帧时间的剩余变化是由于游戏过程中某些场景中显示的细节级别以及设备的图形能力造成的。使用 Android 性能调谐器,您可以查明游戏过程中帧时间比目标时间慢或快的时间,并将这些问题和机会与以下内容相关联
- 特定质量设置
- 游戏中的特定场景
- 特定设备型号或设备规格
记录和上传数据
Tuning Fork 库依赖于其滴答函数之一由 Android 帧速率调整库(或对于旧版 Unity 中不存在帧速率调整库的 Unity 引擎)在每一帧调用。在库中,这些滴答信息被聚合到直方图中,然后定期通过 HTTP 端点上传到 Google Play。每个滴答都被记录为与 仪器键 和 注释 相关联。您可以使用 Unity 插件定义注释。
仪器键
仪器键指示滴答来自帧中的哪个位置,并且是一个必须传递给每个滴答函数调用的整数。这是由 Unity 插件自动完成的。如果在游戏的 Unity 设置中启用了优化帧速率调整选项(在 Unity 2019.3.14 或更高版本中可用),Android 性能调谐器将使用来自 Android 帧速率调整库的信息来报告增强的指标。
注释
注释提供了关于记录滴答时游戏正在执行的操作的上下文信息。例如,注释可以识别以下任何内容
- 当前游戏关卡
- 正在加载特定场景
- 屏幕上出现“大Boss”
- 任何其他相关游戏状态信息
注释是在 Unity 插件提供的对话框中定义的。
在内部,Tuning Fork 库使用 Google 的协议缓冲区格式来存储注释和保真度参数。这是一种定义明确的多语言协议,用于可扩展的结构化数据。有关更多信息,请参阅 协议缓冲区文档。
保真度参数
保真度参数会影响游戏的性能和图形保真度,例如网格细节级别、纹理分辨率和抗锯齿方法。与注释一样,保真度参数是在 Unity 插件提供的对话框中定义的。
内存和 CPU 开销
Tuning Fork 库使用的所有内存都在初始化时分配,以避免在游戏过程中出现意外情况。数据的大小取决于仪器键的数量、可能注释的数量以及每个直方图中存储桶的数量;它是所有这些乘以每个存储桶四个字节的倍数。此外,所有直方图都有两个副本,以便能够以双缓冲方式进行提交。
提交发生在单独的线程上,不会阻塞滴答调用。如果无法建立上传连接,则将提交排队以供以后上传。
调用滴答函数的处理开销很小:它只需计算直方图存储桶数组中的索引并递增整数计数即可。
Web 请求
库对服务器端点发出两种类型的请求
- 初始化时的
generateTuningParameters
请求 - 在游戏过程中定期发出
uploadTelemetry
请求以将数据发送到服务器
离线玩家
如果在初始化时没有可用的连接,则该请求将尝试多次,并随着时间的推移增加回退时间。如果在上传时没有连接,则会缓存上传。上传将作为文件存储在临时存储中。
要求
要在游戏中使用该插件,请使用受支持的 Unity 版本
- Unity 2017.4 或更高版本和 .NET 4.6 版
- 要使用 APK 扩展文件,需要 Unity 2018.2
- 为了改进帧速率调整和 GPU 测量,需要 Unity 2019.3.14 或更高版本。
- 对于 Addressables 场景支持,需要 Unity 2019.3 或更高版本和 Addressables 软件包 1.19.4 或更高版本。
在 Unity 中集成 Android 性能调谐器
有关在 Unity 中集成 Android 性能调谐器的信息,请参阅 启用 API。