はじめに
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でスプリング効果を簡単に追加できるツールキットです。物理ベースのスプリングやアニメーションに対応しており、ゲームに動的でリアルな動きを加えます。特徴として、ユーザーインターフェースの改善、物理エンジンと連携した自然な動き、使いやすいカスタマイズオプションがあります。
あわせて読みたい
一度だけ処理を実行したいときの実装や、Updateを使わない工夫を学びたい方におすすめの記事:
- 🔁 【Unity】Updateを使わずにくり返し処理を実行する簡単スクリプト
➡while(true)を使った繰り返し処理の代替テクニックを初心者向けに解説! - ⏱️ Unityで簡単!n秒おきに繰り返し実行するスクリプトを作ろう
➡InvokeRepeatingで時間間隔のある処理を実装する方法が学べます。 - 🧠 UnityのFixedUpdateとUpdateの違いを正しく理解する!使い分けのポイントを徹底解説
➡ それぞれの処理タイミングの違いと使い分け方をマスターしよう。 - 🧩 Unityでステートマシンを活用!ゲーム開発を効率化する方法
➡ ステートマシンを使えばUpdateを使わずに状態ごとに処理を切り替えられます。 - 🧪 【完全解説】Unityの非同期処理!Coroutineとasync/awaitの違いと使い方
➡ 非同期処理を使ってUpdateに頼らない効率的な処理の組み立て方を学べます。







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。