※この記事は2年前くらい(2016年)に、当時在籍していた某社内で投稿したものを引き上げて、個人で再掲載しています。誰も読むことができない記事に価値なんてないからね~。Confidentialなネタは無いので念のため。
#背景
Unityの入門書を読むと、大抵は「Update関数のコールタイミングは環境や処理負荷に依存する」、というようなことが書かれている。
カジュアルゲームとかなら問題ないかもしれないが、例えばシューティングゲームのように「0.2秒間隔で弾を撃つ」というような処理を考えた場合、Update関数が不定期でコールされるとゲームバランスが崩壊してしまう。
そこで、今回はフレームレートを調整する方法を記載する。
#目標フレームレート
一般的なゲームは60FPSまたは30FPSである。
今回は60FPSとする。
#フレームレートを表示する
とりあえず初期設定でのフレームレートがどうなっているかを確認する。
以下のソースをMain Cameraに追加する。
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」にする。
(2)以下のプログラムをMainCameraに追加する。
using UnityEngine;
using System.Collections;
public class SystemManager : MonoBehaviour {
void Awake() {
Application.targetFrameRate = 60; //60FPSに設定
}
}
#実行結果
PC上ではこんな感じ。スマホでも同様の結果を得られた。
試しにApplication.targetFrameRate = 40 にした場合もちゃんと反映される。
以上