UPL4-4——垂直同步带来的等待问题

本章代码关键字

1
Application.targetFrameRate     // 帧率限制

垂直同步的作用

在未开启垂直同步的情况下,游戏可能在显示器未完成当前帧的刷新时,就输出下一帧图像,
导致屏幕的 上下部分显示的是不同的画面内容,这就是“画面撕裂”。
垂直同步会强制显卡等待显示器刷新完成后再提交下一帧图像,从而避免撕裂。

但是它可能带来一些副作用

  1. 输入延迟增加

    游戏被迫等待显示器信号,延迟图像输出,会让操作感觉迟钝

  2. 帧率下降

    如果帧率无法维持在刷新率水平,垂直同步会强行降档到下一个可整除值(如从 60 → 30FPS),造成明显卡顿

因此在使用垂直同步时应根据实际情况而定:

  1. 对图像撕裂特别敏感的游戏(如第三人称 3D、赛车等)
  2. 游戏帧率远高于显示器刷新率,容易画面撕裂
  3. 对输入延迟不特别敏感的项目

垂直同步影响帧率具体分析

显示器通常以固定的频率刷新画面(如 60Hz 表示每秒刷新 60 次,每帧 16.67ms)
而游戏中渲染图像的速度通常不固定,有时快于显示器刷新,有时慢于
垂直同步(VSync)会强制游戏等显示器准备好再提交新帧,避免屏幕撕裂

这样可能造成两个问题

  1. 如果游戏渲染太快,它要等一等(游戏帧率会降低)
  2. 如果游戏渲染太慢,它只能跳过一帧,延后一轮提交(游戏帧率会降低)

影响帧率主要有两种情况:

  1. 游戏帧率略高于刷新率,会强制等待

    比如游戏渲染能力是 90FPS,而显示器是 60Hz,垂直同步开启后,项目 只能 每 16.67ms 渲一帧,即游戏被“卡”在 60FPS

  2. 游戏帧率低于刷新率 ,会被“降档”处理

    比如游戏当前只能 50FPS,而显示器是 60Hz,垂直同步要求必须整除刷新频率(开启垂直同步时,游戏的帧率必须与显示器刷新率成整数倍的关系)
    于是 游戏 被“降档”到 30FPS(60 ÷ 2),这会造成严重卡顿或掉帧感

也就是说,垂直同步的开启可能带来游戏帧率下降的问题
如果游戏帧率的下降给玩家带来了不好的体验,建议谨慎使用垂直同步
特别是游戏帧率低于显示器刷新率的时候,可以不用开启垂直同步

Unity 中如何设置垂直同步开关

Unity 的垂直同步如何设置

  1. Unity 的垂直同步设置 API 为: QualitySettings.vSyncCount,其中,设置不同值代表:

    1
    QualitySettings.vSyncCount = 0;
    • 0 : 关闭垂直同步
    • 1 : 每帧同步
    • 2 : 隔一帧同步
  2. 编辑器中设置

    Edit > Project Settings > Quality

    image

    • Don’t Sync(0)即可关闭 VSync
    • Every V Blank(1):每次垂直同步(默认)
    • Every Second V Blank(2):隔一帧同步(更低帧率)

使用垂直同步时的注意事项

  • 开发调试时:通常关闭垂直同步观察真实的 GPU 性能瓶颈

  • 低端机运行卡顿时:关闭垂直同步可减少帧率锁死卡顿

  • 正式发包时:

    1. 帧率较高的项目可以开启垂直同步防止画面撕裂(比如主机、VR 的高帧率项目)
    2. 帧率较低的项目可以关闭垂直同步避免帧率降档
    3. 或者直接交给玩家在设置中进行设置

在使用垂直同步时应注意:

  1. 确保帧率 >= 显示器刷新率

    如果帧率低于刷新率,系统会“降档”(如从 60FPS 降为 30FPS),导致明显卡顿
    建议确保游戏至少稳定在刷新率(如 60 Hz)之上

  2. 避免频繁掉帧或波动

    帧率波动容易触发降档,产生体验断崖式下降
    使用 Application.targetFrameRate 或其他方式稳定帧率

    1
    Application.targetFrameRate = 60;
  3. 测试不同设备刷新率

    玩家显示器可能是 60Hz、75Hz、120Hz、144Hz、165Hz
    如果你写死了某些逻辑基于固定帧率(比如 60 FPS),在高刷新率设备上可能出错
    应尽量 基于 Time.deltaTime 实现帧无关逻辑

  4. 注意输入延迟

    VSync 会导致 GPU 等待显示器信号再提交帧,会增加输入延迟(尤其是在低帧率时)
    射击、格斗等对响应要求高的游戏需谨慎使用

  5. 与平台特性/设置协调

    有些平台默认强制开启 VSync(如某些安卓设备)
    有些平台(如 PC)允许玩家手动控制显卡驱动中的 VSync 设置
    开发时应 暴露 VSync 控制项(设置菜单),让玩家按需开启 / 关闭

等等