【Unity】フレームレート(FPS)とは?固定化するための設定方法を紹介!

UnityでFPSを固定する方法 Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「Unityでフレームレートを固定化する設定を知りたい。」

「フレームレートを設定しないとどうなるの?」

というお悩みの方に向けた内容となっています。

フレームレートとは、1秒間に画像が何回切り替わっているのかを表した数字のことを言います。

ゲームでは良く聞くことが多いフレームレートという言葉ですが、ゲーム以外にもアニメや映画、YouTubeなど画面に表示する際にフレームレートが関係してきます。

そして、Unityでゲーム制作する際にも、このフレームレートを固定化しておくことができます。

そこで、このページでは、フレームレートがどういうものなのか、またUnityでゲームを作る際にフレームレートを固定化するメリットや固定化する方法についてまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

フレームレート(FPS)とは?

まずは、フレームレートがどういうものなのかについて解説していきます。

1秒間にフレームが切り替わっている回数の単位のこと

フレームレートとは、1秒間に何回画像が切り替わっているかを表している回数のことで、fps(frame per second)という単位を使います。

例えば、

30fps ⇒ 1秒間に30枚の画像が切り替わって映像が表示されている
60fps ⇒ 1秒間に60枚の画像が切り替わって映像が表示されている

ということを表しています。

一般的には、このfpsの値が低いと少しかくかくした映像となってしまい、反対に、fpsが高いとより滑らかな映像を表示させられますが、その分容量が増えてしまいデバイスの負荷が増えることになります。

ゲームで表示されている画面も、1枚1枚の静止画(フレーム)を切り替えて表示させているため、フレームレート設定は重要な項目となってきます。

リフレッシュレートも注意しておこう

フレームレートと同じような言葉に、リフレッシュレートという言葉があります。

リフレッシュレートとは、出力先のディスプレイ側が1秒間に何回画面を書き換えることが出来るかを表している数値で、Hz(ヘルツ)の単位を使います。

フレームレートがゲーム側の設定なのに対して、リフレッシュレートは出力先のディスプレイ側の能力値のようなものとなります。

そして、フレームレートがどんなに高くても、それに対応するリフレッシュレートを持つディスプレイで無いと、そのフレームレートで表示させることができません。

例えば、120fpsのゲームを60Hzのディスプレイで表示しようとしても、60fpsに変換されて表示されることになります。

Unityのデフォルト設定は自動でFPSが切り替わる

Unityでゲームを作る場合、フレームレートの設定を何もしなくても、ゲームを表示させることができます。

これは、Unityのデフォルト設定として、出力先のリフレッシュレートの値を元に、フレームレートが設定されているからです。

そのため、Unityではディスプレイや環境によって、フレームレートが自動的に切り替わることになります。

なお実際に、Unityで制作しているゲームを実行すると、現在のフレームレートを確認することができます。

ゲーム画面の「Stats」をクリックすると、Graphicsという項目にFPSの表記があります。

フレームレートを固定化するメリット

フレームレートを設定しなくてもゲームが表示されるのに、フレームレートを固定化するのはなぜでしょうか?

それは、どのような性能のデバイスでゲームをプレイしても、同じ速度で動かすことが出来るからです。

例えば、1フレームで1マス動かすというプログラムを組んでいた場合、

60fps ⇒ 1秒間に60マス動く
120fps ⇒ 1秒間に
120マス動く

となり、fpsによって動くスピードが変わることになってしまいます。

これを防ぐために、ゲーム制作する際にフレームレートを固定化することを行います。

Unityのフレームレートを固定化する設定方法

ここからは、実際にUnity上でフレームレートを固定化する設定方法を紹介していきます。

手順①VSync Countを「Don‘t Sync」に変更する

まずは、メニューバーの「Edit」から「ProjectSettings」を選択します。

項目から「Quality」を選択して、「VSync Count」の項目を「Don‘t Sync」に変更します。

この変更で、ディスプレイと同期せずに手動でフレームレートを設定することができます。

手順②スクリプト上でフレームレートを設定する

次に、どれでもいいので、オブジェクトにアタッチしているスクリプトを開いて、Start関数もしくはAwake関数の箇所に以下のコードを追加しましょう。

Application.targetFrameRate = 60;

「60」の部分が設定したいフレームレートの値になるので、固定化したいフレームレートの数値に変更して設定しましょう。

例えば、以下のような形になります。

private void Start()
{
	Application.targetFrameRate = 60;
}

もう一度ゲーム画面でフレームレートを確認してみましょう。

60fpsに固定化出来ているのが確認できました。

まとめ

このページでは、Unityのフレームレートを固定化する設定方法について紹介していきましたが、いかがでしたでしょうか?

フレームレートとは、映像を表示する際に1秒間に画像を何回切り替えて表示されるのかを表した数字のことで、fpsという単位を使って表示します。

Unityなどのゲーム作りでは、フレームレートによってキャラクターの移動速度が変わってしまったりするため、固定化して作っていくことが多いです。

Unityでフレームレートを固定する場合は、VSync Countを変更してスクリプトにコードでFPSを書く必要がありますので、忘れないようにしておきましょう。

最後までお読みいただきまして、ありがとうございました!

コメント