UnityでのVSync Count設定について

1. VSyncとは?

ゲームやアプリの描画速度(フレームレート)と、モニターのリフレッシュレート(画面の書き換え頻度)を同期させる仕組みを VSync(Vertical Synchronization) と呼びます。

  • リフレッシュレート(例: 60Hz)→ 1秒間に60回画面を更新するディスプレイの性能
  • フレームレート(fps)→ 1秒間に何枚の画像を描画するか

この2つがズレると、画面が上下で食い違う「ティアリング」という現象が発生します。VSyncはこれを防ぐために用いられます。


2. UnityのVSync Count設定

Unityでは Project Settings → Quality → VSync Count で制御できます。内部的には QualitySettings.vSyncCountというプロパティです。

意味挙動
0Don’t SyncVSyncを無効化。GPUが出せる限りのフレームを描画。Application.targetFrameRate が優先される。
1Every V Blank垂直同期ごとにフレームを更新。60Hzモニタなら最大60fps。
2Every Second V Blank2回に1回同期。60Hzなら30fpsに固定。

3. メリットとデメリット

VSync有効(1以上)

  • メリット・画面のティアリングを防ぐ・描画が安定し、映像が滑らかに見える
  • デメリット・入力遅延(Input Lag)が増える・性能不足で同期を維持できないと、カクつきが目立つ

VSync無効(0)

  • メリット・入力レスポンスが速い・制限を外してベンチマーク的に使える
  • デメリット・ティアリングが発生する可能性・GPUフル稼働でバッテリー消費・発熱が増える

4. スクリプトからの制御

講義で実際に見せると理解しやすいサンプルコードです。

using UnityEngine;

public class VSyncExample : MonoBehaviour
{
    void Start()
    {
        // VSyncを無効化して60fpsに固定
        QualitySettings.vSyncCount = 0;
        Application.targetFrameRate = 60;

        // VSyncを有効化(1回の垂直同期ごと)
        // QualitySettings.vSyncCount = 1;
    }
}

補足

  • vSyncCount = 0 → Application.targetFrameRate が効く
  • vSyncCount >= 1 → targetFrameRateは無視される

5. 実用的な設定例

  • モバイルアプリ(iOS / Android)→ VSync無効(0)+ targetFrameRate指定(60fpsや30fps)でバッテリー負担を調整
  • PCゲーム(一般向け)→ VSync=1 が基本(モニタのHzに同期)
  • 競技系・レスポンス重視→ VSync=0 + targetFrameRate高め、または無制限

まとめ

  • VSyncは「画面のズレ防止」と「入力遅延」のトレードオフ
  • Unityでは Quality Settings → VSync Count で設定
  • スクリプトから QualitySettings.vSyncCount で切り替え可能
  • 目的に応じて設定を使い分ける のが重要
訪問数 11 回, 今日の訪問数 11回

Unity

Posted by hidepon