本指南介绍了如何使用 Unity 插件来记录和上传来自 Unity 2017.4 或更高版本的帧时间数据。
对于使用 C 或 C++ 的游戏引擎,请参阅原生游戏引擎指南。
背景
游戏体验的一个关键组成部分是渲染性能。渲染性能是以下两个输入的产物:
- 帧率:每秒绘制帧数。
- 图形质量设置:呈现帧的保真度级别,包括模拟保真度和图形。
对于游戏而言,良好的渲染性能定义如下:
- 提供稳定、一致的帧率(即以期望频率渲染的帧的百分比)。
- 在保持稳定性的前提下,以尽可能高的频率渲染帧,通常为 30 或 60 FPS,具体取决于游戏类型。
- 在给定用户屏幕尺寸和密度的情况下,最大限度地提高细节级别,同时仍能实现期望的稳定帧率。
Android 帧同步库限制了帧时间的大部分变化,为游戏提供了稳定的帧率。帧时间中的剩余变化是由于游戏过程中特定场景中显示的细节级别以及设备的图形功能所致。使用 Android Performance Tuner,您可以精确定位游戏过程中帧时间比目标慢或快的时间点,并将这些问题和机会与以下各项关联起来:
- 特定质量设置
- 游戏中的特定场景
- 特定设备型号或设备规格
记录和上传数据
Tuning Fork 库依赖于其某个计时函数由 Android 帧同步库(对于未包含帧同步库的旧版 Unity,则由 Unity 引擎)每帧调用。在库中,此计时信息会被聚合到直方图中,然后通过 HTTP 端点定期上传到 Google Play。每个计时都被记录为与一个测量键和一个注解相关联。您可以使用 Unity 插件定义注解。
测量键
测量键表示计时来自帧的哪个位置,并且是一个必须传递给每个计时函数调用的整数。这由 Unity 插件自动完成。如果在您游戏的 Unity 设置中启用了“优化帧同步”选项(在 Unity 2019.3.14 或更高版本中可用),Android Performance Tuner 将使用 Android 帧同步库中的信息来报告增强指标。
注解
注解提供有关在记录计时时游戏正在做什么的上下文信息。例如,注解可以识别以下任何一项:
- 当前游戏关卡
- 正在加载特定场景
- 屏幕上出现“大 Boss”
- 任何其他相关的游戏状态信息
注解在 Unity 插件提供的对话框中定义。
在内部,Tuning Fork 库使用 Google 的协议缓冲区格式存储注解和保真度参数。这是一种定义明确的多语言协议,用于可扩展的结构化数据。如需了解更多信息,请参阅协议缓冲区文档。
保真度参数
保真度参数会影响游戏的性能和图形保真度,例如网格细节级别、纹理分辨率和抗锯齿方法。与注解一样,保真度参数在 Unity 插件提供的对话框中定义。
内存和 CPU 开销
Tuning Fork 库使用的所有内存都在初始化时分配,以避免在游戏过程中出现意外。数据的大小取决于测量键的数量、可能的注解数量以及每个直方图中的桶数量;它是所有这些乘以每个桶四字节的倍数。此外,所有直方图都有两个副本,以允许双缓冲方式提交。
提交操作在单独的线程上进行,并且不会阻塞计时调用。如果上传连接不可用,则提交操作会排队等待稍后上传。
调用计时函数几乎没有处理开销:它只是计算直方图桶数组中的索引并递增整数计数。
网络请求
该库向服务器端点发出两种请求:
- 初始化时的
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 Performance Tuner
有关在 Unity 中集成 Android Performance Tuner 的信息,请参阅启用 API。