【学習】MonoBehaviour クラス(スクリプトの基底クラス)

広告

Unity 入門シリーズでは、

  • C# スクリプトで MonoBehaviour を継承した
  • Start と Update で処理を書いた

という形でスクリプトの基本を学びました。

しかし、MonoBehaviour には他にも重要なメソッドやライフサイクルがあります。

MonoBehaviour クラス

の主な API をまとめて押さえましょう。

今回は MonoBehaviour のライフサイクルとよく使うメソッドを解説します。

今日学ぶこと

  • Awake / Start … 初期化のタイミング
  • Update / FixedUpdate / LateUpdate … 毎フレームの処理
  • OnEnable / OnDisable … 有効化・無効化のタイミング
  • GetComponent … コンポーネントを取得する
  • gameObject / transform … 自分自身への参照

MonoBehaviour とは

MonoBehaviour は、Unity のスクリプトの基底クラスです。これを継承したクラスを GameObject にアタッチすると、Unity がライフサイクルメソッドを自動的に呼び出します。

using UnityEngine;

public class MyScript : MonoBehaviour
{
    // Unity が呼び出す
}

ライフサイクル(呼ばれる順)

メソッド呼ばれるタイミング
Awakeスクリプトが読み込まれたとき、1回だけ。他の Awake より先
OnEnableオブジェクトが有効になったとき。毎回
Start最初の Update の前、1回だけ
FixedUpdate物理演算の更新ごと(約 0.02 秒間隔)
Update毎フレーム(約 1/60 秒間隔)
LateUpdateすべての Update の後
OnDisableオブジェクトが無効になったとき
OnDestroyオブジェクトが破棄されるとき

Awake と Start の違い

メソッド用途
Awake他のスクリプトより先に初期化したいとき。参照の取得など
Startゲーム開始時の初期化。Awake の後に実行される
void Awake()
{
    // 最初に実行。他のオブジェクトの Awake より先
}

void Start()
{
    // 1回だけ。最初の Update の前
}

Update と FixedUpdate の違い

メソッド用途
Update入力、移動、UI など。フレームレートに依存する処理
FixedUpdate物理演算(Rigidbody の操作)。一定間隔で実行される
LateUpdateカメラの追従など、すべての Update の後に実行したい処理
void Update()
{
    // 毎フレーム。入力や Transform の操作
}

void FixedUpdate()
{
    // 物理演算用。Rigidbody の AddForce など
}

OnEnable / OnDisable

オブジェクトが 有効(SetActive(true)) になったとき、無効(SetActive(false)) になったときに呼ばれます。

void OnEnable()
{
    // 有効になったとき。毎回呼ばれる
}

void OnDisable()
{
    // 無効になったとき
}

GetComponent(コンポーネント取得)

GetComponent で、同じ GameObject にアタッチされたコンポーネントを取得できます。

// Rigidbody2D を取得
Rigidbody2D rb = GetComponent<Rigidbody2D>();

// SpriteRenderer を取得
SpriteRenderer sr = GetComponent<SpriteRenderer>();

// 取得できない場合は null
if (rb != null)
{
    rb.velocity = Vector2.zero;
}
メソッド説明
GetComponent()最初に見つかったコンポーネントを取得
GetComponentInChildren()子を含めて検索
GetComponentInParent()親を含めて検索

gameObject / transform

MonoBehaviour には、自分自身への参照が用意されています。

プロパティ説明
gameObjectこのスクリプトがアタッチされている GameObject
transformこの GameObject の Transform(gameObject.transform の省略形)
// 自分自身を削除
Destroy(gameObject);

// 自分の位置を変更
transform.position = new Vector3(0, 0, 0);

完成コード例

using UnityEngine;

public class LifecycleSample : MonoBehaviour
{
    private Rigidbody2D rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Start()
    {
        Debug.Log("ゲーム開始");
    }

    void Update()
    {
        // 毎フレームの処理
    }

    void OnDestroy()
    {
        Debug.Log("破棄されました");
    }
}

重要ポイント

MonoBehaviour は Unity のスクリプトの基底クラスです。

  • Awake … 最初に実行。参照の取得
  • Start … ゲーム開始時の初期化
  • Update … 毎フレーム。入力や移動
  • FixedUpdate … 物理演算用
  • GetComponent … コンポーネントを取得
  • gameObject / transform … 自分自身への参照

発展アイデア

  • Invoke / InvokeRepeating … 遅延実行、一定間隔の実行
  • Coroutine … 複数フレームにわたる処理
  • DontDestroyOnLoad … シーン切り替えで破棄されないようにする

MonoBehaviour は Unity スクリプトの土台 です。ライフサイクルを理解すると、意図したタイミングで処理を書けます。

訪問数 4 回, 今日の訪問数 4回

広告

Unity

Posted by hidepon