Unity

Unity備忘録、STG制作2:フレームレートの調整

※この記事は2年前くらい(2016年)に、当時在籍していた某社内で投稿したものを引き上げて、個人で再掲載しています。誰も読むことができない記事に価値なんてないからね~。Confidentialなネタは無いので念のため。

背景

Unityの入門書を読むと、大抵は「Update関数のコールタイミングは環境や処理負荷に依存する」、というようなことが書かれている。
カジュアルゲームとかなら問題ないかもしれないが、例えばシューティングゲームのように「0.2秒間隔で弾を撃つ」というような処理を考えた場合、Update関数が不定期でコールされるとゲームバランスが崩壊してしまう。
そこで、今回はフレームレートを調整する方法を記載する。

目標フレームレート

一般的なゲームは60FPSまたは30FPSである。
今回は60FPSとする。

フレームレートを表示する

とりあえず初期設定でのフレームレートがどうなっているかを確認する。
以下のソースをMain Cameraに追加する。

DebugInfo.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;


public class DebugInfo : MonoBehaviour {
    public Text FpsText;

    // Update is called once per frame
    void Update () {
        if (Time.frameCount % Application.targetFrameRate == 0)
        {
            FpsText.text = "FPS:" + (int)(1 / Time.deltaTime);
        }   
    }
}

これを自PCとスマホの両方で試したところ、何と普通に60FPSでした。
但し、今回はたまたまデフォルトが60FPSだったというだけなので、正式な手順で60FPSを設定する方法を次に記載する。

フレームレート調整方法

(1)Edit -> Project Setting -> Qualityを開き、「V Sync Count」を「Don't Sync」にする。
01.png

(2)以下のプログラムをMainCameraに追加する。

SystemManager.cs
using UnityEngine;
using System.Collections;

public class SystemManager : MonoBehaviour {

    void Awake() { 
        Application.targetFrameRate = 60; //60FPSに設定  
    }
}

実行結果

PC上ではこんな感じ。スマホでも同様の結果を得られた。
02.png

試しにApplication.targetFrameRate = 40 にした場合もちゃんと反映される。
03.png

以上