UnityでFrameRateを表示させてみた
あらすじ
某花札の会社のインターンを受けようと思い、急ぎ足でゲームを作り始めた。 構想は半年前からずっとあるので、困らないだろう。 とりあえず、FrameRateを表示するプログラム(ゲームプログラミングにおけるHelloWorldみたいなもの)を作った。 Unityは仕組みを覚えるのは少し大変そうだが、その分強力で、DirectXで作った時(本当はDXライブラリ。見栄を張った。)より速く作れた。 まあとにかくコードだコード。
コード
using UnityEngine;
using System.Collections;
using System;
public class FPSViewer : MonoBehaviour
{
public int framePerUpdate = 10;
void Start()
{
StartCoroutine(calcFPS());
}
IEnumerator calcFPS()
{
while (true)
{
var totalTime = 0F;
for (int i = 0; i < framePerUpdate; i++)
{
totalTime += Time.deltaTime;
yield return null;
}
guiText.text = String.Format("{0} FPS ({1}ms)", framePerUpdate / (totalTime / Time.timeScale),
1000 * (totalTime / Time.timeScale) / framePerUpdate);
}
}
}
説明
継続マスターである私は、なんでもかんでも継続を使わないと気が済まないので、C#のコルーチンを使って書いてみた。 あっさりしていて読みやすい。 我ながら素晴らしいコードである。
Unityはpublicなメンバに対して、エディターで値をいじれるようになっているので、frameParUpdateがそうなっているのはそのためである。
ちなみにFPSを測る際にtimeScaleで時間を割ってやらないとスロー再生したときにFPSがおかしくなってしまう。
追記
書くのを忘れたが、このブログのPVなど高が知れているしかまわないだろう。 もちろん上のコードはUnityのGUITextに対して適用するスクリプトである。