自分用Unityメモ:UnityEventでコールバック
ちょっと便利なことを知ったのでブログに書いておこう。
もしかしたら基本なのかもしれないけど。
ボクのような初心者にとってはかなり使える機能だったのだ...。
UnityにはUnityEventなるクラスがありまして、
これを使うことでコールバックイベントのような機能を持たせることができます。
一番わかりやすいのがButtonコンポーネントのOnClickイベント。
//↓この名前空間を使うよと言っておく。 // 言わないとUnityEventなんて知らないよ、と怒られる。 using UnityEngine.Events ~~~~~~~~~~~~ [SerializeField] private UnityEvent callBackEvent;
こんな感じで定義して、シリアライズしておきます。
するとButtonのときみたいにインスペクターから
イベント(任意のメソッド)を追加できるようになります。
(※追加できるのはpublicだけです。引数は1つだけ。きっとスペースの関係)
あとは
callBackEvent.Invoke();
で、設定したイベントを呼び出すことができます。
動的にメソッドを追加・削除したいときは、
AddListener、RemoveListenerを使います。
その場合は多分、引数は2つ以上でも大丈夫だと思います。
(試してないの...でも、ボタンの時は行けたから...)
これを使うことで
「特定の状況になったら呼ばれるイベント」を
あとから決めたり、差し替えたりできます。便利。
今回はこの機能を使って、
マウスのドラッグやタップ(おまけで方向キー)の入力に反応するマネージャーと
超簡易なステートマシンもどきを作ってみました。
最終的に2つを連携させることにしたので
互いのクラスにめり込んでて、あんまりスマートではないけど....。
#追記
気になるのでもうクラス自体をくっつけてしまった。
コードはすっきりした。コードは....