【Unity】デリゲートとコールバックとイベントの復習
デリゲート
通常の実行方法
delegate 戻り値の型 デリゲート名 (関数が引き受ける仮引数);
- 上記を定義したのち、実行したいメソッドで この型の変数にメソッドを仕込む
- メソッドの中で実行したいメソッドを差し替えたいときに使う
Action と Func
- delegate を定義するのが面倒なときにメソッドの引数で登録できる
- public void メソッド名 (Action<T> action)
- このメソッド中で action を実行したいタイミングに action() と書いておく
- 他のメソッドでこのメソッドを実行する際、Method() の引数に実行したいメソッドを記入
- このメソッドの action() のタイミングで 実行したいメソッドを実行してくれる
Action
- 戻り値を持たないデリゲート
Func
- 戻り値を持つデリゲート
ラムダ式
- Task や UniRx に Linq、それにイベントなど、色んな所でやたら出てくる
- ラムダ式が出てくる = 実装は Action/Func、デリゲート
- 実行したいメソッドを差し替え可能にするために使われてる
使い方
- 上記の「他のメソッド」に相当する箇所で、Method (() => 実行したい処理) などと書く
- () は実行したい処理で使う引数
- つまり実行したいメソッドに直接処理を書き込める省略記法
- 匿名メソッド、無名関数とも呼ばれる
コールバック
- 実はもう説明済
- 「Action と Func」項目の (2) がコールバック
- つまりコールバックは、用意済のタイミングで任意のメソッドを実行可にしたもの
参考:デリゲート、ラムダ式、コールバックについて
イベント
- イベントハンドラーの追加と削除が自由にできる便利なやつ
- コールバックのすごい版
- デリゲートのプロパティ版
- クラス内ではデリゲートとして使えて、外からは追加と削除の操作しかできない
- 外から追加するときは += 、削除は -= で
- AsyncOperation.Completed += ラムダ式 とやるアレがイベント
イベントとは
- ボタンが押された、マウスがクリックされたなどの事象のこと
イベントハンドラーとは
- イベントが発生したときに起きる処理のこと
作り方
event デリゲート型 イベント ハンドラー名;
- get/set の代わりに、add/remove が使える
補足
- UniRxはイベントの上位互換
- UniRxでイベント操作もコルーチンもなんでも取り込んで使えるよ! とのこと
参考