MRが楽しい

MRやVRについて学習したことを書き残す

Unityでフレームレート(Update間隔)を変更する

本日は Unity の小ネタ枠です。
Unityでフレームレート(Update間隔)を変更する方法についてです。

デフォルトのフレームレート

デフォルトではフレームレート(Update間隔)はディスプレイのリフレッシュレートに応じて変動します。
常に一定間隔で処理を呼び出したい場合はFixedUpdateを利用します。

以下の現在のフレームレート(Update間隔)とFixedUpdate間隔をログに出力するスクリプトを作成しました。

using UnityEngine;
public class FrameRateTest : MonoBehaviour
{
    void Update()
    {
        // 現在のフレームレート(Update間隔)をログに出力
        Debug.LogFormat($"Update : {1.0f / Time.deltaTime}fps, {Time.deltaTime * 1000.0f}ms");
    }
    
    void FixedUpdate()
    {
        // 現在のFixedUpdate間隔をログに出力
        Debug.LogFormat($"FixedUpdate : {1.0f / Time.deltaTime}fps, {Time.deltaTime * 1000.0f}ms");
    }
}

エディター上で実行した結果が以下になります。

Updateの間隔はリフレッシュレートに応じて変動し、FixedUpdateの間隔は常に一定であることが分かります。
また[Stats]を表示することでも現在のフレームレートを確認することができます。

フレームレートを指定する

フレームレートを指定する場合はスクリプト上でApplication.targetFrameRateを使って指定します。
先ほどのスクリプトに以下のStart関数を追加しました。

    void Start()
    {
        // フレームレートを60fpsに設定する
        Application.targetFrameRate = 60;
    }

再びエディター上で実行した結果が以下になります。
Updateの間隔が凡そ60fpsで実行されるようになりました。

FixedUpdateの間隔を指定する

FixedUpdateの間隔を指定したい場合はメニューから[Edit -> Project Settings...]を開きます。
ダイアログが開くので[Time]タブを開きます。

[Fixed Timestep]の値がFixedUpdateの時間間隔(s)になります。
試しに[0.1]に変更してみます。

以下の通り、FixedUpdateの間隔が0.1秒ごととなり、10fpsの間隔で実行されるようになりました。