Unityのスクリプトの基本!MonoBehaviourとは?Start()とUpdate()の違いを解説

Unityでゲームを作る際に避けて通れないのがスクリプトの作成です。Unityのスクリプトは C# を使用して記述し、その基盤となるのが MonoBehaviour というクラスです。

この記事では、MonoBehaviourとは何か、そしてStart()とUpdate()の違いについて初心者向けにわかりやすく解説します。最後に演習問題も用意しているので、ぜひチャレンジしてみてください!


Unityとスクリプトの関係

Unityでは、ゲームの動作やオブジェクトの動き、ユーザーの入力など、あらゆる動作をスクリプトによって制御します。

スクリプトは主にC#で書かれ、Unityの各オブジェクトにアタッチして動作を与えます。スクリプトを作成する際、ほとんどの場合はUnityが自動生成するひな型から始めます。

このひな型は、MonoBehaviourというクラスを継承しており、これがUnityのスクリプトの基本となっています。


MonoBehaviourとは?

MonoBehaviour(モノビヘイビア)は、Unityのすべてのスクリプトの基盤となるクラス です。

Unityで新しいC#スクリプトを作成すると、自動的に MonoBehaviour を継承したクラスが生成されます。

  • 機能の提供
    Unityのライフサイクルイベント(オブジェクトの生成、更新、破棄など)を簡単に利用できるように設計されています。
  • イベントメソッド
    ゲームが開始された時や、毎フレームの更新、オブジェクトの衝突時など、特定のタイミングで自動的に呼び出されるメソッドが定義されています。

基本的なスクリプトの構造

例えば、以下のようなC#スクリプトが自動生成されます。

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    void Start()
    {
        // ゲーム開始時に1回だけ実行される処理
    }

    void Update()
    {
        // 毎フレーム実行される処理
    }
}

このように、スクリプトは MonoBehaviour を継承することで、Unityのイベント(例えば Start() や Update())を使うことができます。

MonoBehaviourのメリット

MonoBehaviourを継承することで、以下のようなメリットがあります。

  • シンプルな初期化
    ゲーム開始時に一度だけ呼び出されるStart()メソッドを使い、オブジェクトの初期設定や変数の初期化が容易に行えます。
  • 継続的な処理
    毎フレーム呼び出されるUpdate()メソッドにより、オブジェクトの動きやユーザーの入力処理をリアルタイムに実行することが可能です。
  • イベント駆動型プログラミング
    Unityのイベントシステムに連動して、効率的にコードを書くことができ、開発効率が向上します。

Start()とUpdate()の基本

Unityでは、スクリプトのライフサイクル(処理の流れ)が重要です。Start() と Update() は、その中でも基本となるメソッドです。

Start() とは?

Start()メソッドは、オブジェクトが有効化された最初のフレーム一度だけ呼ばれます。

  • 用途
    ゲーム開始時の初期設定や変数の初期化、他のオブジェクトの参照取得などに用いられます。
  • 実行タイミング
    オブジェクトがシーンに配置され、有効化された瞬間に実行されるため、後続の処理の準備が整います。
例:Start() の使い方
using UnityEngine;

public class StartExample : MonoBehaviour
{
    void Start()
    {
        Debug.Log("ゲームが開始されました!");
    }
}

この例では、ゲームが始まるとコンソールに「ゲームがスタートしました!」と一度だけ表示されます。これにより、初期化処理が正しく行われたかどうかを確認する手段としても有用です。


Update() とは?

Update()メソッドは、ゲームが実行されている間、毎フレーム呼び出されるメソッドです。

  • 用途
    キャラクターの移動、アニメーションの更新、ユーザー入力の監視など、リアルタイムな処理に利用されます。
  • 実行タイミング
    ゲームループの中で連続的に呼ばれるため、処理負荷に注意しながら効率的なコードを書くことが求められます。
例:Update() の使い方
using UnityEngine;

public class UpdateExample : MonoBehaviour
{
    void Update()
    {
        Debug.Log("フレームが更新されました!");
    }
}

この例では、ゲームが実行されている間、常に「フレーム更新中…」というメッセージがコンソールに表示されます。これにより、Update()内での処理がどのように連続的に実行されるかを視覚的に確認できます。


Start() と Update() の違い

表のように、Start()はオブジェクトがシーンに登場する際の初期化処理に特化しており、Update()はゲームの進行に合わせた連続的な処理を担当します。

項目Start()Update()
実行回数1回だけ毎フレーム
実行タイミングオブジェクトが有効化されたときフレームが更新されるたび
用途初期設定、変数の初期化、リソースの取得継続的な処理(移動・時間管理など)

演習問題(実践しながら理解しよう!)

問題 1

以下の条件を満たすC#スクリプトを作成してください。

  1. ゲーム開始時に “ゲームスタート!” を1回表示する
  2. 毎フレーム “プレイヤーの位置を更新中…” を表示する

問題 2

以下の条件を満たすC#スクリプトを作成してください。

  1. オブジェクトが生成されたら、変数 speed を 5 に設定する
  2. 毎フレーム、オブジェクトを右方向(X軸)に speed の速さで移動させる

解答例

問題 1の解答

using UnityEngine;

public class GameStartScript : MonoBehaviour
{
    void Start()
    {
        Debug.Log("ゲームスタート!");
    }

    void Update()
    {
        Debug.Log("プレイヤーの位置を更新中…");
    }
}

問題 2の解答

using UnityEngine;

public class MoveObject : MonoBehaviour
{
    private float speed;

    void Start()
    {
        speed = 5f;
    }

    void Update()
    {
        transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
    }
}

まとめ

今回は MonoBehaviourの基本Start() と Update() の違い について学びました。

重要ポイントをおさらい!
  • MonoBehaviour は Unity のスクリプトの基盤
  • Start() は 1回だけ実行 される(初期設定向き)
  • Update() は 毎フレーム実行 される(継続的な処理向き)

これらをしっかり理解すれば、Unityでスクリプトを使いこなせるようになります!
ぜひ、実際にスクリプトを作成して試してみてくださいね! 🚀