WisdomSoft - for your serial experiences.

フレームの更新

Unity では一般的なゲームと同じように、データ更新と描画をフレーム単位で実行します。フレームを更新するたびに実行される Update() メソッドを紹介します。

連続実行されるUpdate()メソッド

通常、ゲームは短い間隔で連続して画面を更新し続けることで、複雑なエフェクトやアニメーションを実現しています。描画処理によって構築された 1 画面のことをフレームと呼び、1 秒間に 30 ~ 60 枚程度のフレームが生成され、ディスプレイを更新しています。

Unity エンジンは、新しいフレームを構築するために、フレームごとにゲームのデータを更新します。有効なオブジェクトに設定されている MonoBehaviour を継承するスクリプトは、フレームが更新されるたびに Update() メソッドが呼び出されます。

Update() メソッド
void Update()

スクリプトの MonoBehaviour クラスを継承したクラスに対して Update() メソッドを実装すると、フレームが更新されるたびに Unity エンジンから Update() メソッドが呼び出されます。このメソッドの中に、オブジェクト自身を更新するコードを記述すれば、常にオブジェクトの状態が最新に保たれます。

ゲーム内のオブジェクトをスクリプトからアニメーションさせるような処理を書く場合、フレームごとに少しずつ座標や向きを変更することで実現できます。

コード1
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour 
{
	void Update() 
	{
		transform.Rotate(0, 1, 0);
	}
}
実行結果
コード1 実行結果

コード1は、フレームが更新され Update() メソッドが実行されると、オブジェクトの向きを Y 軸に対して 1 度だけ回転させる処理を実行しています。Update() メソッド 1 回の実行では 1 度しか回転しませんが、Update() メソッドは連続して呼び出されるため、実行するとオブジェクトがクルクルと回転するアニメーションとなります。

実行結果から Update() メソッドが極めて短い間隔で連続して呼び出されることが確認できます。したがって、このメソッドの中で時間のかかる処理を記述してしまうと、ゲーム全体のパフォーマンスに影響するため注意しなければなりません。

一般的なゲームのパフォーマンス目安となる 30 FPS を実現するには、1 秒間に 30 回のフレームの描画を繰り返す必要があります。これを実現するには 1 フレームに与えられる時間は 1 秒 / 30 回、すなわち 33 ミリ秒しかありません。ゲームは、すべてのフレーム更新処理を 33 ミリ秒以内に終わらせなければなりません。