浏览器计时
本页详细介绍了与 Application.targetFrameRate 参数相关的 WebGL 架构的技术约束。
当为 WebGL 编译 Unity 项目时,Application.targetFrameRate 参数不仅修改了引擎的内部帧限制,还修改了主循环运行所通过的基线浏览器 API。
无上限 (requestAnimationFrame)
如果您取消帧速率上限(取决于 Unity 版本,通过将 Application.targetFrameRate 设置为 -1 或 0),Emscripten 编译器会将 Unity 主循环直接绑定到浏览器 API window.requestAnimationFrame。
- 优点: 这是在网络上最原生、最流畅和最准确的渲染方法。浏览器会自动将调用与玩家显示器的刷新率 (VSync) 同步。
- 分析:
cpuMainThreadFrameTime指标(由 WebAP 读取)反映了 CPU 花费在计算物理和脚本上的实际时间。
人为限制 (setTimeout)
如果您严格执行帧速率(例如,Application.targetFrameRate = 30),Emscripten将被迫放弃 requestAnimationFrame。相反,它利用 setTimeout() API 或复杂的内部计时器组合来人为地延迟循环。
CPU 指标失真 (Emscripten 陷阱)
人为计时器在测量 CPU 时间时会引入严重的差异。处理器可能会在 5 毫秒内完成所有游戏逻辑计算并进入空闲状态,但 WaitForEndOfFrame 协程将不会恢复,直到 setTimeout 计时器到期。
因此: FrameTimingManager 会将此等待时间记录到 CPU 计时中。分析器(和 WebAP 跟踪器)会推断出您遇到了 CPU 瓶颈,即使处理器在功能上处于空闲状态,并且帧只是在等待浏览器计时器。
正确的配置策略
为了在浏览器中获得最佳的 Web Adaptive Performance 运行效果:
- 不要使用
Application.targetFrameRate。将其保留为-1(无上限)。 - 在插件设置中指定所需的 FPS(
Target Min FPS = 60)。WebAP 不会将该值用作硬性限制,而是将其用作渲染质量决策的基础。
