フレームとは
ゲームや映画は、静止画を連続再生して、パラパラ漫画と同じような仕組みで動きのある映像を作り出している。
1つの静止画を表示させてから、次の静止画を表示するまでを「フレーム」という。
fps(frame per second/フレームレート) とは
1秒間に何回フレームが切り替わっているかの単位。
格闘ゲームでよく使われている。
最近のゲームは 60fps で処理されているものが多いと思います。(鉄拳とかスマブラとか…)
60fps だと、1秒間に60回フレームが切り替わっているという意味になります。
言い換えると、 1秒間に60枚の静止画(コマ)が使われていることになります。
ちなみに映画は 24fps らしいです。
ゲームが常に 60fps で動作している場合は、60fps 以上のスピードで計算、画像を作成して、わざと遅らせて画面に表示しています。
もし、計算が遅れてた場合など、何らかの原因で画面に表示できず、画面が一瞬途切れることがあります。
これを フレーム落ち と言います。
ゲームをしていて、たまにカクカクしたりするのは、フレーム落ちが発生しているためです。
余談:リフレッシュレート(Hz) とは
1秒間に最大何回フレームの切り替わりを処理できるかの単位。
モニターとかスマホのスペック紹介でよく使われている。
144Hz だと、1秒間に最大144回フレームを切り替えることができるという意味になります。
ちなみに iPhone の画面のリフレッシュレートは 60Hz、iPad Proは 120Hz らしいです。
Unity の Update 関数
Unity の Update は、毎フレームごとに呼ばれます。
Unity におけるfps
Unity のデフォルト設定では、実行環境によってFPSが自動調整されるようになっています。
この時間は、 Time.deltaTime
を使用することで取得できます。
直前のフレームと今のフレーム間で経過した時間[秒] を返してくれます。
Unity の FixedUpdate 関数
Unity には Update 関数とは別に、 FixedUpdate 関数も存在します。
これは、fps とは関係なく一定間隔で実行されます。
(一定間隔 = デフォルトでは 0.01 秒)
物理演算の前に呼ばれているらしいです。
余談:Unity の LastUpdate 関数
Unity には LastUpdate 関数も存在します。
これは Update 関数が実行完了したあとに、実行される関数です。
Unity で fps を固定する
- Edit > Project Settings を押す
- Quality > VSsync Count の項目を Don't Sync に変更する
- スクリプトで
Application.targetFrameRate
を定義する
Application.targetFrameRate = 30; // 30fpsに設定
ゲーム開始時に実行される Awake 関数や Start 関数で呼び出すと良いと思います。
参考文献
書籍『Unity入門』 - Unity におけるフレームと Update
ゲームのフレームとは【Unityゲーム制作基礎】
【Unity】フレームレートの固定と端末での計測