はじめに
Unityでゲームを作っていると、Update
関数の中で特定の処理を一度だけ実行させたいことがありますよね。Update
は毎フレームごとに呼ばれる関数なので、そのまま書いてしまうと毎フレーム処理が実行されてしまいます。
ここでは、Update
関数内で特定の処理を一度だけ実行させるための簡単な方法を紹介します。これにはフラグ変数(例えばbool
型)を使うのが一般的です。以下にその具体的な方法を説明します。
Unityを触ったことがないという方はコチラの記事から見てみてください!
1. フラグ変数を定義する
まず、処理が実行されたかどうかを記録するためのフラグ変数を定義します。bool
型の変数を使います。
コード全体の説明
このコードは、hasExecuted
という名前の変数を定義し、その初期値をfalse
に設定しています。この変数は、特定の処理が一度だけ実行されたかどうかを記録するために使われます。
各部分の説明
private bool hasExecuted = false;
private
: これはアクセス修飾子で、この変数が宣言されているクラス内からのみアクセスできることを意味します。他のクラスや外部からはアクセスできません。bool
: これはブール型というデータ型を表します。ブール型はtrue
(真)かfalse
(偽)の2つの値しか持ちません。hasExecuted
: これは変数の名前です。この名前でプログラム内の他の部分でこの変数を参照します。= false;
: これは変数の初期値をfalse
に設定しています。プログラムの開始時点では、まだ一度も処理が実行されていないことを示しています。
全体の動き
- プログラムが始まるときに、
hasExecuted
変数が作られ、その初期値はfalse
に設定されます。 Update
メソッドが毎フレーム呼ばれ、スペースキーが押されたときにこの変数がチェックされます。hasExecuted
がfalse
の場合にのみ特定の処理が実行され、その後hasExecuted
がtrue
に設定されます。hasExecuted
がtrue
になった後は、もうその処理は実行されません。
private bool hasExecuted = false;
2. Update関数内でフラグを使った条件分岐を追加する
次に、Update
関数の中でこのフラグ変数をチェックして、処理を一度だけ実行するようにします。
コード全体の説明
このコードは、Update
メソッド内で、ある条件が満たされると一度だけ特定の処理を実行します。その後、その処理が再び実行されないようにするための仕組みを持っています。
各部分の説明
void Update()
これはUpdate
メソッドの宣言です。このメソッドは、ゲームオブジェクトの動きやその他の時間経過に応じた処理を行うために、毎フレーム自動的に呼び出されます。if (!hasExecuted)
ここで、hasExecuted
という名前の変数をチェックしています。!
は否定を意味し、hasExecuted
がfalse
のときにのみ、この条件文の中の処理が実行されます。Debug.Log("この処理は一度だけ実行されます");
この行では、Unityのコンソールに「この処理は一度だけ実行されます」というメッセージを表示します。これはデバッグ(バグを見つける)ために使います。hasExecuted = true;
この行で、hasExecuted
というフラグをtrue
に設定します。これにより、次のフレーム以降、上記のif
文の条件が満たされなくなります。
全体の動き
- ゲームが開始されてから、毎フレームごとに
Update
メソッドが呼ばれます。 hasExecuted
がfalse
のときだけ、Debug.Log
メソッドを使ってメッセージを表示し、その後hasExecuted
をtrue
に設定します。hasExecuted
がtrue
になると、それ以降この処理は実行されません。
void Update()
{
if (!hasExecuted)
{
// 一度だけ実行したい処理
Debug.Log("この処理は一度だけ実行されます");
// フラグをtrueに設定する
hasExecuted = true;
}
}
3. もう少し応用編:特定の条件で一度だけ実行させたい場合
例えば、特定のキーが押されたときに一度だけ処理を実行させたい場合も、同じ方法で実現できます。
コード全体の説明
このコードは、スペースキーが押されたときに一度だけ特定の処理を実行し、その後再び実行されないようにしています。
各部分の説明
void Update()
これはUpdate
メソッドの宣言です。このメソッドは、ゲームオブジェクトの動きやその他の時間経過に応じた処理を行うために、毎フレーム自動的に呼び出されます。if (Input.GetKeyDown(KeyCode.Space) && !hasExecuted)
ここでは2つの条件をチェックしています。Input.GetKeyDown(KeyCode.Space)
: スペースキーが押されたときにtrue
になります。!hasExecuted
:hasExecuted
がfalse
のときにtrue
になります。
if
文の中の処理が実行されます。Debug.Log("スペースキーが押されて、この処理は一度だけ実行されます");
この行では、Unityのコンソールに「スペースキーが押されて、この処理は一度だけ実行されます」というメッセージを表示します。これはデバッグ(バグを見つける)ために使います。hasExecuted = true;
この行で、hasExecuted
というフラグをtrue
に設定します。これにより、次のフレーム以降、上記のif
文の条件が満たされなくなります。
全体の動き
- ゲームが開始されてから、毎フレームごとに
Update
メソッドが呼ばれます。 - スペースキーが押され、かつ
hasExecuted
がfalse
のときだけ、Debug.Log
メソッドを使ってメッセージを表示し、その後hasExecuted
をtrue
に設定します。 hasExecuted
がtrue
になると、それ以降この処理は実行されません。
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && !hasExecuted)
{
// スペースキーが押されたときに一度だけ実行したい処理
Debug.Log("スペースキーが押されて、この処理は一度だけ実行されます");
// フラグをtrueに設定する
hasExecuted = true;
}
}
このように、フラグ変数を使うことで、Update
関数内で特定の処理を一度だけ実行させることができます。フラグを使って状態を管理するのは、シンプルで効果的な方法です。

これで、必要な処理を一度だけ実行させる方法が理解できたと思います。ゲーム開発の他の部分にも応用できるので、ぜひ試してみてくださいね。
おすすめのアセット
「All In 1 Springs Toolkit」は、Unityでスプリング効果を簡単に追加できるツールキットです。物理ベースのスプリングやアニメーションに対応しており、ゲームに動的でリアルな動きを加えます。特徴として、ユーザーインターフェースの改善、物理エンジンと連携した自然な動き、使いやすいカスタマイズオプションがあります。