[Unity] 正確なFPSを求める
Unityではゲーム実行中にStatsから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; } } }
実際に実行してみた結果です。
比較的ばらつきの少ない値が表示できます。
(もちろんUpdateメソッド内部での計算量が増減するとばらつきが発生する可能性があります)
信頼性のあるパフォーマンス計測を行うにはこの方法を用いたほうがよいでしょう。