本日は 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の間隔で実行されるようになりました。