TASOGARE GAMES BLOG

タソガレゲイムス :: 神奈川県でゲームを開発する人々のブログです。

Unityでフレームレート(fps)を取得する

Unity逆引き:フレームレート(fps)を取得する

  1. StatisticsウィンドウでFPSを確認する
  2. FPSを計算する (1)
  3. FPSを計算する (2)
  4. ターゲットフレームレートを取得する

StatisticsウィンドウでFPSを確認する

Gameウィンドウの右上にあるStatsを押すと表示されるStatisticsウィンドウで、FPSを確認できます。

f:id:tasogare_games:20150609004637p:plain

Statsで確認できるFPSはばらつきが大きいのと、スクリプトからは取得できません。

FPSを計算する (1)

その瞬間のFPS(1秒あたりのフレーム数)を求めるには、Time.deltaTimeの逆数を用います。 Time.deltaTimeは1つ前のフレームからの経過時間(秒)を表しています。

using UnityEngine;
using System.Collections;

public class Main : MonoBehaviour
{
    void Update()
    {
        float fps = 1f / Time.deltaTime;
        Debug.LogFormat("{0}fps", fps);
    }
}

FPSを計算する (2)

実際に一定時間あたりのフレーム更新回数を数えてFPSを算出する方法もあります。 この手法では、前述のよりも正確かつ安定した値を取得できます。

以下のサンプルでは、0.5秒間隔でフレームレートを計算しています。 Time.realtimeSinceStartupは、ゲーム開始時からの経過時間(秒)です。

using UnityEngine;
using System.Collections;

public class Main : MonoBehaviour
{
    int frameCount;
    float prevTime;

    void Start()
    {
        frameCount = 0;
        prevTime = 0.0f;
    }

    void Update()
    {
        ++frameCount;
        float time = Time.realtimeSinceStartup - prevTime;

        if (time >= 0.5f) {
            Debug.LogFormat("{0}fps", frameCount / time);

            frameCount = 0;
            prevTime = Time.realtimeSinceStartup;
        }
    }
}

参考: Unity - FPSを計測する

ターゲットフレームレートを取得する

ターゲットフレームレートとは、UnityEngineが目標とするFPSです。 Application.targetFrameRateから設定・取得できます。 初期値では-1が設定されています。負の値は「自動」を意味します。

public class Main : MonoBehaviour
{
    void Start()
    {
        Debug.Log(Application.targetFrameRate);
    }
}