コールバック(callback)とは?
英語の “Callback” とは、「呼び戻す」という意味です。
プログラミングにおけるコールバックとは、関数やメソッドに引数として別の関数を渡し、
必要なタイミングでその関数を呼び出す仕組みを指します。
例えば、以下のようなタイミングで使用されます:
- 読み込みなどの非同期処理が終了したとき
- サーバーとの通信が完了したとき
- 長い効果音の再生が終わったとき
- 動画を再生する準備が整ったとき
Unityにおけるコールバック
Unityのライフサイクルメソッド
Unity
において、MonoBehaviour
を継承したクラスを作成すると、
Awake
、Start
、Update
、OnDestroy
など、特定のタイミングで呼び出されるメソッドを記述できます。
これらはコールバックの仕組みであり、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
を活用すれば、スクリプトとエディター上の設定を簡単に連携でき、
柔軟で再利用性の高いコードを実現できるでしょう。
ぜひ、コールバックの仕組みを深く理解し、日々の開発に役立ててください。