UPL4-4——垂直同步带来的等待问题
UPL4-4——垂直同步带来的等待问题
本章代码关键字
1 | Application.targetFrameRate // 帧率限制 |
垂直同步的作用
在未开启垂直同步的情况下,游戏可能在显示器未完成当前帧的刷新时,就输出下一帧图像,
导致屏幕的 上下部分显示的是不同的画面内容,这就是“画面撕裂”。
垂直同步会强制显卡等待显示器刷新完成后再提交下一帧图像,从而避免撕裂。
但是它可能带来一些副作用
-
输入延迟增加
游戏被迫等待显示器信号,延迟图像输出,会让操作感觉迟钝
-
帧率下降
如果帧率无法维持在刷新率水平,垂直同步会强行降档到下一个可整除值(如从 60 → 30FPS),造成明显卡顿
因此在使用垂直同步时应根据实际情况而定:
- 对图像撕裂特别敏感的游戏(如第三人称 3D、赛车等)
- 游戏帧率远高于显示器刷新率,容易画面撕裂
- 对输入延迟不特别敏感的项目
垂直同步影响帧率具体分析
显示器通常以固定的频率刷新画面(如 60Hz 表示每秒刷新 60 次,每帧 16.67ms)
而游戏中渲染图像的速度通常不固定,有时快于显示器刷新,有时慢于
垂直同步(VSync)会强制游戏等显示器准备好再提交新帧,避免屏幕撕裂
这样可能造成两个问题
- 如果游戏渲染太快,它要等一等(游戏帧率会降低)
- 如果游戏渲染太慢,它只能跳过一帧,延后一轮提交(游戏帧率会降低)
影响帧率主要有两种情况:
-
游戏帧率略高于刷新率,会强制等待
比如游戏渲染能力是 90FPS,而显示器是 60Hz,垂直同步开启后,项目 只能 每 16.67ms 渲一帧,即游戏被“卡”在 60FPS
-
游戏帧率低于刷新率 ,会被“降档”处理
比如游戏当前只能 50FPS,而显示器是 60Hz,垂直同步要求必须整除刷新频率(开启垂直同步时,游戏的帧率必须与显示器刷新率成整数倍的关系)
于是 游戏 被“降档”到 30FPS(60 ÷ 2),这会造成严重卡顿或掉帧感
也就是说,垂直同步的开启可能带来游戏帧率下降的问题
如果游戏帧率的下降给玩家带来了不好的体验,建议谨慎使用垂直同步
特别是游戏帧率低于显示器刷新率的时候,可以不用开启垂直同步
Unity 中如何设置垂直同步开关
Unity 的垂直同步如何设置
-
Unity 的垂直同步设置 API 为:
QualitySettings.vSyncCount,其中,设置不同值代表:1
QualitySettings.vSyncCount = 0;
-
0: 关闭垂直同步 -
1: 每帧同步 -
2: 隔一帧同步
-
-
编辑器中设置
Edit > Project Settings > Quality

- Don’t Sync(0)即可关闭 VSync
- Every V Blank(1):每次垂直同步(默认)
- Every Second V Blank(2):隔一帧同步(更低帧率)
使用垂直同步时的注意事项
-
开发调试时:通常关闭垂直同步观察真实的 GPU 性能瓶颈
-
低端机运行卡顿时:关闭垂直同步可减少帧率锁死卡顿
-
正式发包时:
- 帧率较高的项目可以开启垂直同步防止画面撕裂(比如主机、VR 的高帧率项目)
- 帧率较低的项目可以关闭垂直同步避免帧率降档
- 或者直接交给玩家在设置中进行设置
在使用垂直同步时应注意:
-
确保帧率 >= 显示器刷新率
如果帧率低于刷新率,系统会“降档”(如从 60FPS 降为 30FPS),导致明显卡顿
建议确保游戏至少稳定在刷新率(如 60 Hz)之上 -
避免频繁掉帧或波动
帧率波动容易触发降档,产生体验断崖式下降
使用Application.targetFrameRate或其他方式稳定帧率1
Application.targetFrameRate = 60;
-
测试不同设备刷新率
玩家显示器可能是 60Hz、75Hz、120Hz、144Hz、165Hz
如果你写死了某些逻辑基于固定帧率(比如 60 FPS),在高刷新率设备上可能出错
应尽量 基于Time.deltaTime实现帧无关逻辑 -
注意输入延迟
VSync 会导致 GPU 等待显示器信号再提交帧,会增加输入延迟(尤其是在低帧率时)
射击、格斗等对响应要求高的游戏需谨慎使用 -
与平台特性/设置协调
有些平台默认强制开启 VSync(如某些安卓设备)
有些平台(如 PC)允许玩家手动控制显卡驱动中的 VSync 设置
开发时应 暴露 VSync 控制项(设置菜单),让玩家按需开启 / 关闭
等等
