かさたな日記

主にUnityを使った制作記録。書いてる人は初心者です。一緒に頑張ろう。

自分用Unityメモ:UnityEventでコールバック

ちょっと便利なことを知ったのでブログに書いておこう。
もしかしたら基本なのかもしれないけど。
ボクのような初心者にとってはかなり使える機能だったのだ...。


UnityにはUnityEventなるクラスがありまして、
これを使うことでコールバックイベントのような機能を持たせることができます。
一番わかりやすいのがButtonコンポーネントのOnClickイベント。

//↓この名前空間を使うよと言っておく。
//  言わないとUnityEventなんて知らないよ、と怒られる。
using UnityEngine.Events

~~~~~~~~~~~~

    [SerializeField]
    private UnityEvent callBackEvent;

こんな感じで定義して、シリアライズしておきます。

するとButtonのときみたいにインスペクターから
イベント(任意のメソッド)を追加できるようになります。
(※追加できるのはpublicだけです。引数は1つだけ。きっとスペースの関係)

あとは

    callBackEvent.Invoke();

で、設定したイベントを呼び出すことができます。

動的にメソッドを追加・削除したいときは、
AddListener、RemoveListenerを使います。
その場合は多分、引数は2つ以上でも大丈夫だと思います。
(試してないの...でも、ボタンの時は行けたから...)


これを使うことで
「特定の状況になったら呼ばれるイベント」を
あとから決めたり、差し替えたりできます。便利。


今回はこの機能を使って、
マウスのドラッグやタップ(おまけで方向キー)の入力に反応するマネージャーと
超簡易なステートマシンもどきを作ってみました。




最終的に2つを連携させることにしたので
互いのクラスにめり込んでて、あんまりスマートではないけど....。


#追記
気になるのでもうクラス自体をくっつけてしまった。
コードはすっきりした。コードは....