Unity Application.targetFrameRate设60手机仍120FPS修复方案
Unity高刷安卓设备上
Application.targetFrameRate=60不生效修复方案 问题核心
编辑器下帧率限制生效、真机跑到120FPS,是因为编辑器和安卓真机的帧率管控逻辑完全不同,Application.targetFrameRate的优先级低于项目质量设置、平台默认配置、第三方SDK的帧率修改逻辑。其他项目相同设置可正常生效,通常是因为对应项目没有触发上述几个覆盖逻辑。
排查修复步骤
- 关闭垂直同步覆盖
打开Edit > Project Settings > Quality,选中真机运行时使用的质量等级,将VSync Count设置为Don't Sync。只要该选项值不为Don't Sync,Application.targetFrameRate的手动设置会被直接忽略,设备会自动跑到屏幕支持的最高刷新率。 - 关闭安卓平台自动高刷配置
打开Edit > Project Settings > Player > Android平台标签 > Resolution and Presentation板块,取消勾选Optimized Frame Rate选项。该选项为Unity针对高刷设备的默认适配项,开启后会自动将目标帧率设为设备支持的最高值,手动设置的60帧限制会被覆盖。 - 调整帧率设置的调用时机
不要在Awake或最早的Start生命周期里设置帧率,安卓平台Unity启动完成前会重置一次帧率配置,延迟1帧等原生层初始化完成后再设置即可,参考代码:IEnumerator Start() { yield return null; // 等待第一帧渲染完成,Unity原生初始化结束 Application.targetFrameRate = 60; OnDemandRendering.renderFrameInterval = 1; // 防止按需渲染逻辑干扰帧率 } - 排查第三方SDK篡改帧率
广告、变现、数据分析类第三方SDK经常会在初始化时自动把帧率拉到设备最高值来保证自身内容流畅度,可以在Update中加一行日志Debug.Log($"当前目标帧率:{Application.targetFrameRate}"),连接真机跑日志如果发现运行过程中targetFrameRate被改成120或-1,找到对应SDK的配置项,关闭它的自动帧率调整开关即可。
你提供的FPS显示脚本逻辑没有问题,计数结果准确,不存在显示误差。
内容的提问来源于stack exchange,提问作者Deniz Sarıbayır
相关产品推荐
相关产品推荐

