[Unity] 正確なFPSを求める

Unityではゲーム実行中にStatsからFPSを表示できます。

unity-fps

しかし、実際に表示してみると大きなばらつきがあることに気が付くと思います。
内部でどのように算出しているのかはよくわかりません・・・
そこで、よりばらつきの少ない方法で算出する方法をご紹介します。

基本的な考え方は1秒間にUpdateが何回走ったかをカウントすることです。
このカウント数がそのままFPSになります。

以下計測用のスクリプトです。

using UnityEngine;
using System.Collections;

public class FpsMeasure : MonoBehaviour {
    int frameCount;
    float nextTime;

	// Use this for initialization
	void Start () {
        nextTime = Time.time + 1;
	}

	// Update is called once per frame
	void Update () {
        frameCount++;

        if ( Time.time >= nextTime ) {
            // 1秒経ったらFPSを表示
            Debug.Log("FPS : " + frameCount);
            frameCount = 0;
            nextTime += 1;
        }
	}
}

実際に実行してみた結果です。

unity-fps2

比較的ばらつきの少ない値が表示できます。
(もちろんUpdateメソッド内部での計算量が増減するとばらつきが発生する可能性があります)

信頼性のあるパフォーマンス計測を行うにはこの方法を用いたほうがよいでしょう。