nikeeshi のコーディング記

コーディングの成果をはっつけるとこ。このブログにあるソースコードはNYSL Version 0.9982に従い公開します(2014/06/18)。

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に対して適用するスクリプトである。