27.性能优化-Unity机制问题-垂直同步带来的等待
27.1 知识点
垂直同步的作用
未开启垂直同步时,游戏可能在显示器还没完成当前帧刷新时就输出下一帧图像,导致屏幕上下部分显示不同画面,即「画面撕裂」。垂直同步会强制显卡等显示器刷新完成后再提交下一帧,从而避免撕裂。
但它可能带来一些副作用:
输入延迟增加
游戏被迫等待显示器信号再输出画面,图像延迟会让操作感觉迟钝。帧率下降
若帧率无法稳定在刷新率水平,垂直同步会强行把帧率降到下一个可整除值(例如从 60 降到 30 FPS),造成明显卡顿。
因此是否开启垂直同步要根据实际情况决定,例如:
- 对画面撕裂特别敏感的游戏(如第三人称 3D、赛车等)
- 游戏帧率远高于显示器刷新率、容易撕裂的情况
- 对输入延迟不特别敏感的项目
垂直同步影响帧率具体分析
显示器通常以固定频率刷新(如 60Hz 表示每秒 60 次,每帧约 16.67ms),而游戏渲染速度往往不固定,有时快于、有时慢于刷新。垂直同步(VSync)会强制游戏等显示器准备好再提交新帧,避免撕裂。
这可能带来两个结果:
- 游戏渲染太快:需要等待下一次垂直消隐再提交,帧率会被「压」下来。
- 游戏渲染太慢:只能跳过本帧、延后一轮提交,帧率也会降低。
影响帧率主要有两种情况:
游戏帧率略高于刷新率,会强制等待
例如游戏能跑 90 FPS,显示器 60Hz;开启垂直同步后,只能每 16.67ms 提交一帧,实际被「卡」在 60 FPS。游戏帧率低于刷新率,会被「降档」
例如游戏只能 50 FPS,显示器 60Hz;垂直同步要求帧率与刷新率成整数倍关系,于是会被降档到 30 FPS(60 ÷ 2),造成严重卡顿或掉帧感。
也就是说,开启垂直同步可能带来帧率下降。若这种下降影响体验,应谨慎使用;尤其当游戏帧率低于显示器刷新率时,可以不开启垂直同步。
Unity中如何设置垂直同步开关
1. 代码控制
QualitySettings.vSyncCount = 0;
0:关闭垂直同步1:每帧同步(Every V Blank)2:隔一帧同步(Every Second V Blank)
2. 编辑器中设置
Edit > Project Settings > Quality,在 Rendering 下找到 VSync Count:

- Don’t Sync(0):关闭 VSync
- Every V Blank(1):每次垂直同步(默认)
- Every Second V Blank(2):隔一帧同步,帧率更低
使用垂直同步时的注意事项
开发调试时
通常关闭垂直同步,便于观察真实的 GPU 性能瓶颈。
低端机运行卡顿时
关闭垂直同步可减少因帧率被锁死带来的卡顿感。
正式发包时
- 帧率较高的项目可以开启垂直同步防止画面撕裂(如主机、VR 等高帧率项目)
- 帧率较低的项目可以关闭垂直同步,避免降档
- 或将 VSync 开关交给玩家在设置里自行选择
使用垂直同步时应注意:
尽量保证帧率 ≥ 显示器刷新率
若帧率低于刷新率,会触发降档(如 60Hz 下从 60 掉到 30 FPS),导致明显卡顿。建议至少稳定在刷新率(如 60Hz)以上。避免频繁掉帧或波动
帧率波动容易触发降档,体验会断崖式变差。可用Application.targetFrameRate = 60等方式配合稳定帧率。考虑不同设备的刷新率
玩家显示器可能是 60Hz、75Hz、120Hz、144Hz、165Hz 等。若逻辑写死为固定帧率(如 60 FPS),在高刷新率设备上可能出问题,应尽量基于Time.deltaTime做帧率无关逻辑。注意输入延迟
VSync 会让 GPU 等显示器信号再提交帧,会增加输入延迟(低帧率时更明显)。射击、格斗等对响应要求高的游戏需谨慎使用。与平台特性/设置协调
部分平台默认强制开启 VSync(如某些安卓设备);部分平台(如 PC)允许玩家在显卡驱动里控制 VSync。开发时建议在设置菜单中暴露 VSync 选项,让玩家按需开启/关闭。
等等。
27.2 知识点代码
Lesson27_性能优化_Unity机制问题_垂直同步带来的等待.cs
public class Lesson27_性能优化_Unity机制问题_垂直同步带来的等待
{
#region 知识点一 垂直同步的作用
/*
* 未开启垂直同步时,游戏可能在显示器未完成当前帧刷新时就输出下一帧,导致画面撕裂。
* 垂直同步会强制显卡等显示器刷新完成后再提交下一帧,从而避免撕裂。
* 副作用:输入延迟增加、帧率下降(无法维持刷新率时会降档,如 60 → 30 FPS)。
* 应根据实际情况使用:对撕裂敏感、帧率远高于刷新率、对输入延迟不敏感的项目等。
*/
#endregion
#region 知识点二 垂直同步影响帧率具体分析
/*
* 显示器以固定频率刷新(如 60Hz,每帧 16.67ms),游戏渲染速度不固定。
* VSync 强制等显示器准备好再提交新帧。
* 渲染太快 → 被等待压帧;渲染太慢 → 跳帧延后提交。
* 帧率略高于刷新率 → 被卡在刷新率;帧率低于刷新率 → 降档(如 50 FPS @ 60Hz → 30 FPS),造成卡顿。
* 若帧率下降影响体验,建议谨慎使用;帧率低于刷新率时可关闭垂直同步。
*/
#endregion
#region 知识点三 Unity中如何设置垂直同步开关
/*
* 代码:QualitySettings.vSyncCount = 0(关闭)/ 1(每帧同步)/ 2(隔一帧同步)。
* 编辑器:Edit > Project Settings > Quality > Rendering > VSync Count。
* Don't Sync(0)、Every V Blank(1)、Every Second V Blank(2)。
*/
#endregion
#region 知识点四 使用垂直同步时的注意事项
/*
* 开发调试:通常关闭 VSync 观察真实 GPU 瓶颈。
* 低端机卡顿:关闭 VSync 减少帧率锁死卡顿。
* 正式发包:高帧率项目可开启防撕裂;低帧率项目可关闭避免降档;或交给玩家在设置中选择。
* 注意:确保帧率 >= 刷新率、避免帧率波动、考虑不同设备刷新率、注意输入延迟、与平台/设置协调,设置菜单暴露 VSync 选项等。
*/
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com