コールバック(callback)とは?

英語の “Callback” とは、「呼び戻す」という意味です。

プログラミングにおけるコールバックとは、関数やメソッドに引数として別の関数を渡し、

必要なタイミングでその関数を呼び出す仕組みを指します。

例えば、以下のようなタイミングで使用されます:

  • 読み込みなどの非同期処理が終了したとき
  • サーバーとの通信が完了したとき
  • 長い効果音の再生が終わったとき
  • 動画を再生する準備が整ったとき

Unityにおけるコールバック

Unityのライフサイクルメソッド

Unityにおいて、MonoBehaviour を継承したクラスを作成すると、

AwakeStartUpdateOnDestroy など、特定のタイミングで呼び出されるメソッドを記述できます。

これらはコールバックの仕組みであり、Unityエンジンが特定のタイミングで自動的に呼び出します。

using UnityEngine;

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

    private void Update() 
    {
        Debug.Log("アップデート!");
    }
}

イベントに伴うコールバック

ライフサイクルメソッド以外にも、特定の条件を満たしたときに呼び出されるコールバックを設定することができます。

例えば、以下のような物理演算系のイベントがあります:

  • OnCollisionEnter
  • OnTriggerEnter

これらのメソッドをクラス内に記述しておくと、条件が満たされたタイミングで自動的に呼び出されます。

using UnityEngine;

public class TriggerExample : MonoBehaviour
{
    void OnTriggerEnter(Collider other)
    {
        Debug.Log($"{other.gameObject.name}と接触");
    }
}

UnityEventを使用する

UnityにはUnityEventというクラスがあり、

これを定義することで、インスペクタ上から簡単にコールバックを設定できます。

using UnityEngine;
using UnityEngine.Events;

public class CustomEvent : MonoBehaviour
{
    [SerializeField]
    private UnityEvent onCustomEvent1;
    [SerializeField]
    private UnityEvent onCustomEvent2;

    void Start()
    {
        // イベントを発火
        onCustomEvent1.Invoke();
        onCustomEvent2.Invoke();
    }

    public void CustomMethod()
    {
        Debug.Log("イベントが呼ばれた!");
    }
}

インスペクタ上は以下の様に表示されます。

Button コンポーネントの OnClickEvent のように、イベントを登録して呼び出す仕組みが利用できることが分かると思います。

また、登録するイベントが引数を伴う場合は、その引数も設定できます。

今回、OnCustomEvent2 には、自身の GameObject.SetActive(false) を呼び出すように設定しているため、

Start メソッド内で OnCustomEvent2 を実行すると、そのタイミングでオブジェクトが非アクティブになります。

まとめ

Unityの MonoBehaviour コールバックを理解することは、

ゲームオブジェクトのライフサイクルやイベント駆動型の処理を効果的に扱うための第一歩です。

基礎をしっかり押さえ、コールバックを活用することで、アイデアを形にする力が磨かれます。

また、UnityEvent を活用すれば、スクリプトとエディター上の設定を簡単に連携でき、

柔軟で再利用性の高いコードを実現できるでしょう。

ぜひ、コールバックの仕組みを深く理解し、日々の開発に役立ててください。

🔗関連ページ