【Unity】フレームレートの固定と端末での計測

フレームレートの固定
スポンサーリンク

今回の記事はUnityでフレームレート(FPS)を固定化する方法と、端末で実行中のアプリのフレームレートを計測するサンプルコードについて書きます。

こんな人におすすめ

・Unityでアプリを作っている
・Unityのフレームレートを一定に固定したい

フレームレートの固定

まずはフレームレートを固定していきたいと思います。設定を行うために「Project Settings」を開きます。

設定の場所

開いたら「Quality」の項目を開きます。

Qualityの設定

その中にあるチェックボックス が集まったエリアの「Medium」の部分を押します。そしてテレビマークの下の方にある「Default」の横の三角マークを押して、デフォルトの設定を「Medium」に変えます。

※ここで行っている作業は端末で実行時のクオリティ設定と、PCで実行時の設定を揃えて、差が出ないようにするためのものです。

フレームレートの設定項目

次に下の方にスクロールすると出てくる「VSync Count」を「Don’t Sync」にします。これにより、コードからフレームレート(FPS)を設定できるようになります。

ここまでの設定が終ったら、以下の1行をスクリプトの必ず通る部分に追加してください。なお1度読み込めばOKです。

Application.targetFrameRate = 30;
フレームレート固定サンプル

Start()などで呼び出すことをおすすめします。

これによりフレームレートが30で固定されます。60のゲームを作りたい時は数値を60に変えてください!

端末でフレームレートを計測して表示する

実際にフレームレートが固定されているかを確認するために、フレームレートを計測してみましょう。以下のサンプルを新しいスクリプトとしてプロジェクトに追加してください。

※名前を変えるとエラーになる場合があるので「ViewFPS」というスクリプトで作成してください。

■ViewFPS

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ViewFPS : MonoBehaviour
{
    [SerializeField]
    private float Interval = 0.1f;

    private Text _tex;

    private float _time_cnt;
    private int _frames;
    private float _time_mn;
    private float _fps;

    private void Start()
    {
        // FPSの値を別の場所で指定しているなら以下の設定は消す
        Application.targetFrameRate = 30;

        // テキストコンポーネントの取得
        _tex = this.GetComponent<Text>();
    }

    // FPSの表示と計算
    private void Update()
    {
        _time_mn -= Time.deltaTime;
        _time_cnt += Time.timeScale / Time.deltaTime;
        _frames++;

        if (0 < _time_mn) return;

        _fps = _time_cnt / _frames;
        _time_mn = Interval;
        _time_cnt = 0;
        _frames = 0;

        _tex.text = "FPS: " + _fps.ToString("f2");
    }
}

あとはプロジェクトにテキストを一つ追加し、追加したテキストに上のスクリプトをアタッチしてください。

スクリプトのアタッチ

テキストのサイズが小さくて見えにくい場合は、拡大などを行い見やすい大きさに変更してください!

最後に

これで端末でもフレームレートの確認ができるようになったと思います。

フレームレートを固定することで、端末による環境の差をある程度軽減することが可能です。フレームレートの固定はしっかり行いたいものです。

また、携帯でゲームを行う時は30fpsもあれば十分かと思います。60fpsは、確かに動きは滑らかになりますが、端末が高温になってしまったり、必要以上に電池の消耗を促進させることになったりもします。

作るゲームの規模に合わせて、適切なフレームレートを選びましょう!