FPSの測り方(具体例)

Unityのエディター上では簡単にFPSを表示できます。
ゲームビューのStatusボタンを押すと、画面の右中段に表示されます。
簡易的に調べられるので便利です。
実機上の確認には使用できないので端末の性能を測ることに使えません。
つまり、リリースするときの機種次第では目安程度の意味しかありません。
FPSが急激に変わったりすることを見つけるとかに使いましょう。

FPSの表示をするにはOnGUIを使うのが簡単です。
Unity UI(uGUI)を使ってもかまいません。
表示方法は何でも良いです。

FPSを測るには2通りあります。

  • 定義通り、1秒間に何回更新が行われたかカウントする方法
  • 更新間隔を測り、その逆数をFPSとする方法

1秒間を測りその間に何回更新されたかをカウントして、FPSを求めます。
FPS = (更新回数)
定義通りの値であり、整数値が返ります。利点は見やすく、ゲームの1秒ごとのパフォーマンスが把握できることです。1秒というのはそれなりに長いので、パフォーマンスが良い悪いという指標に使いやすいです。
欠点は瞬間的なパフォーマンスの悪化を見逃すことと実装の面倒さです。
1秒ごとというのを判定し、そのたびに初期化をして繰り返すといったことになります。

更新間隔を測ることから求める方法は、測った更新間隔でこの後も処理が続くと仮定して1秒間に何回更新されるかを決定しています。
FPS = 1 / (更新間隔)
になります。
1フレーム前の更新時刻を 記録しておけば毎フレームFPSを求めることができます。この方法の 利点は瞬間的な処理の速さを知ることができることと実装が簡単ということです。欠点は瞬間的なゲームのパフォーマンスしか測れないことです。

FreelyAppsでは2番目の方法を使っています。
そのまま使うと継続的なパフォーマンスがわかりにくいため、平均を用いてある程度の長さでのパフォーマンスを測っています。
最新の更新間隔だけでなく、いくつか前の更新間隔も記憶しておくということです。

fFPSとfAveFPSには毎フレーム更新された値が入ります。
上では30フレーム分の更新間隔を平均し、その更新間隔からfAveFPSを求めました。
この値をOnGUIかUnity UIで出せばいいわけです。