本指南介绍如何使用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。