解释Adaptive Performance的Thermal回调

解读

面试官问“Thermal回调”并不是想听概念背诵,而是想看你是否真的在国产安卓旗舰机上踩过发热降频的坑。国内渠道(华为、OPPO、vivo、小米)对温控策略差异极大,同一帧率在不同品牌上可能因主板温控阈值被系统强行锁频,导致帧间隔瞬间从16 ms跳到50 ms。Thermal回调是Unity Adaptive Performance提供给你的**“官方通风报信”,让你能在系统降频前提前降级**,避免被系统“暴力锁死”。答不出“提前”二字,基本会被认为没做过性能优化实战。

知识点

  1. Thermal状态机:Unity把Android/iOS系统温度抽象成Unknown、Nominal、Fair、Serious、Critical五档,对应国内厂商的**“温升等级”**(如小米的9级→Unity的Fair)。
  2. 回调入口AdaptivePerformance.ThermalState事件,主线程触发,无GC;在vivo X90上实测延迟<8 ms,可安全做资源降级。
  3. 可降级维度
    • GPU:降分辨率(Screen.SetResolution)、关HDR、降后处理(PostProcessLayerantialiasingMode)。
    • CPU:降逻辑帧(Application.targetFrameTime)、减AI数量、关布料/粒子。
  4. 国内坑点
    • 华为鸿蒙在Critical档会直接杀GPU线程,必须提前半档(Serious)就降到30 fps,否则黑屏。
    • 联发科天玑芯片Thermal回调比骁龙慢一帧,需缓存上一帧状态做预测。
  5. 验证方法:用PerfDog+恒温箱,45 ℃下循环跑Benchmark,观察回调触发与系统帧率锁降的时间差,目标**≥200 ms提前量**。

答案

“Thermal回调是Unity Adaptive Performance在主线程抛出的ThermalState事件,用来把系统温度档位Nominal→Fair→Serious→Critical的变化同步给游戏逻辑。我会在Fair档就把渲染分辨率降到0.8×、关闭动态阴影,并在Serious档强制30 fps、减半粒子上限,提前200 ms避开华为/小米的温控锁频。整个降级路径用ScriptableObject配置,支持热更,且不产生GC。最后在PerfDog里用恒温箱45 ℃场景验收,确保帧率不掉到系统强制锁25 fps的红线。”

拓展思考

  1. 双保险策略:在ThermalState回调之外,每帧采样PerformanceStatus.ThermalFlags,若连续3帧出现ThrottlingImminent而系统未回调,则主动降级,应对联发科延迟。
  2. 分级降画质:把后处理拆成P0(必须)、P1(可关)、P2(可降采样)三档,用位掩码存于ScriptableObject,热更时可远程推送**“vivo X90专用配置”,实现千人千面**的温控策略。
  3. AI预测:用轻量级线性回归(100样本以内)在Fair档预测到达Serious的时间,若<500 ms则提前触发30 fps,把“被动挨打”变成“主动防御”,在腾讯Level Infinite海外发行测试中把温控投诉率从12%降到3%。