はじめに
Unityを使ってゲームを開発していると、「Update関数の中で特定の処理を一度だけ実行させたい」という状況に遭遇することがあります。
Update関数は毎フレーム実行されるため、何度も繰り返される処理には適していますが、一度だけ実行したい処理には工夫が必要です。
この記事では、UnityでUpdate関数内で一度だけ実行する方法を初心者にもわかりやすく解説します。
Update関数とは?
Unityでゲームを開発する際には、オブジェクトの動作を制御するためにスクリプトを書きます。その中で、Update関数は最もよく使われる関数の一つです。
この関数は、ゲームが実行されている間、毎フレームごとに自動的に呼び出されます。そのため、プレイヤーの入力を受け取ったり、オブジェクトを動かしたりする処理をここに書きます。
一度だけ実行したい場合の課題
しかし、全ての処理をUpdate関数に書くわけにはいきません。例えば、ゲーム開始時に一度だけ初期化を行いたい場合や、特定の条件が満たされた時に一度だけ何かを実行したい場合などが考えられます。このような時にUpdate関数内で制御する方法を見ていきましょう。
方法1:フラグを使用する
最も簡単で一般的な方法は、フラグ(boolean変数)を使用することです。フラグを使って、特定の処理が既に実行されたかどうかを管理します。
bool isInitialized = false;
void Update() {
if (!isInitialized) {
// ここに一度だけ実行したい処理を書く
isInitialized = true;
}
}
このコードでは、isInitialized
変数がfalse
の場合のみ、処理が実行されます。処理が一度実行されると、isInitialized
をtrue
に設定することで、次のフレームからは処理が実行されなくなります。
方法2:Start関数を利用する
初期化処理など、ゲーム開始時に一度だけ実行したい処理は、Start関数を利用するのも良い方法です。Start関数は、オブジェクトが有効になった時に一度だけ呼び出されます。
void Start() {
// ここに初期化処理を書く
}
ただし、Start関数はオブジェクトのライフサイクルに関わるため、Update関数内で条件に応じて一度だけ実行したい場合には適していません。
方法3:イベントやデリゲートを使用する
より複雑なケースでは、イベントやデリゲートを使用して処理を一度だけ実行する方法もあります。特定の条件が満たされた時にイベントを発火させ、そのイベントに対して一度だけ反応するようにすることで、処理を制御できます。
void OnEnable() {
MyEvent.AddListener(OnceMethod);
}
void OnDisable() {
MyEvent.RemoveListener(OnceMethod);
}
void OnceMethod() {
// ここに一度だけ実行したい処理を書く
// 処理が終わったらリスナーを削除
MyEvent.RemoveListener(OnceMethod);
}
まとめ
UnityでUpdate関数内で一度だけ実行したい処理がある場合、フラグを使用する方法、Start関数を利用する方法、イベントやデリゲートを使用する方法があります。場面に応じて最適な方法を選んでください。Unityの開発は工夫次第で多彩な実装が可能です。この記事が、Unityでのゲーム開発を始めたばかりの方々にとって役立つ情報であれば幸いです。