为何Unity打包为exe后FPS固定60,编辑器中却达200?已关VSYNC
嘿,这个场景我太熟悉了——编辑器里跑的飞起,一打包成exe就锁60FPS,哪怕关了VSYNC也没用。别着急,大概率是这几个地方没设置对,一个个排查:
检查Quality Settings的帧率上限
这是最常见的原因!Unity的编辑器和打包后的Quality配置可能不一样。打开Edit > Project Settings > Quality,找到你打包用的Quality Level(比如Standalone对应的那个),把Max Frame Rate改成Unlimited或者你想要的数值。很多时候默认打包配置会把这个设成60,编辑器里可能没开限制所以能跑200。显卡驱动的全局帧率限制
显卡厂商的驱动面板(比如NVIDIA控制面板、AMD Radeon Software)经常会偷偷给应用设帧率上限。找到你的游戏exe,看看是不是被强制限制了60FPS,改成“由应用程序决定”或者直接取消限制。尤其是笔记本的双显卡,有时候集成显卡的设置会拖后腿。用代码强制取消帧率限制
有时候系统或驱动的设置会覆盖Unity的配置,你可以在代码里硬刚:在某个单例的Start()方法里加一行:Application.targetFrameRate = -1; // -1表示不限制帧率或者直接设成你想要的数值比如
200,这样能强制Unity忽略外部限制。Windows系统级别的设置干扰
- 检查Windows的游戏模式:有时候它会自动限制帧率来节省资源,你可以关掉试试(设置→游戏→游戏模式)。
- 确认显示器刷新率:右键桌面→显示设置→高级显示设置,确保你的显示器刷新率设成了支持的最高值(比如144Hz),虽然编辑器里能跑200,但难保打包后系统没自动切回去。
- 图形设置里指定高性能GPU:打开Windows设置→系统→显示→图形设置,把你的exe添加进去,设为“高性能”,避免集成显卡限制性能。
Player Settings里的隐藏配置
打开Edit > Project Settings > Player > Resolution and Presentation:- 确认VSync Count设为
Don't Sync; - 把Frame Rate设为
0(0表示不限制); - 试试关掉Optimize Frame Pacing选项,这个功能有时候会强制同步帧率,导致锁60。
- 确认VSync Count设为
一般按这个顺序排查,很快就能找到问题所在。
内容的提问来源于stack exchange,提问作者Víctor Martínez




