sound sepher's PASTIME

ゲーム開発で思ったことや、趣味などの話を書き綴っていきます。

【Unity】デリゲートとコールバックとイベントの復習

デリゲート

通常の実行方法

delegate 戻り値の型 デリゲート名 (関数が引き受ける仮引数);

  • 上記を定義したのち、実行したいメソッドで この型の変数にメソッドを仕込む
    • デリゲート名 hoge = メソッド()
    • これを hoge() として実行すると、登録したメソッドが実行される
  • メソッドの中で実行したいメソッドを差し替えたいときに使う

Action と Func

  1. delegate を定義するのが面倒なときにメソッドの引数で登録できる
  2. public void メソッド名 (Action<T> action)
    1. このメソッド中で action を実行したいタイミングに action() と書いておく
    2. 他のメソッドでこのメソッドを実行する際、Method() の引数に実行したいメソッドを記入
    3. このメソッドの action() のタイミングで 実行したいメソッドを実行してくれる
Action
  •  戻り値を持たないデリゲート
Func
  • 戻り値を持つデリゲート

ラムダ式

  • Task や UniRx に Linq、それにイベントなど、色んな所でやたら出てくる
  • ラムダ式が出てくる = 実装は Action/Func、デリゲート
    • 実行したいメソッドを差し替え可能にするために使われてる
使い方
  • 上記の「他のメソッド」に相当する箇所で、Method (() => 実行したい処理) などと書く
    • () は実行したい処理で使う引数
  • つまり実行したいメソッドに直接処理を書き込める省略記法
    • 匿名メソッド、無名関数とも呼ばれる

コールバック

  • 実はもう説明済
    • 「Action と Func」項目の (2) がコールバック
  • つまりコールバックは、用意済のタイミングで任意のメソッドを実行可にしたもの

参考:デリゲート、ラムダ式、コールバックについて

tech-lab.sios.jp

イベント

  • イベントハンドラーの追加と削除が自由にできる便利なやつ
  • コールバックのすごい版
  • デリゲートのプロパティ版
    • クラス内ではデリゲートとして使えて、外からは追加と削除の操作しかできない
    • 外から追加するときは += 、削除は -= で
      • AsyncOperation.Completed += ラムダ式 とやるアレがイベント
イベントとは
  • ボタンが押された、マウスがクリックされたなどの事象のこと
イベントハンドラーとは
  • イベントが発生したときに起きる処理のこと

作り方

event デリゲート型 イベント ハンドラー名;

  •  get/set の代わりに、add/remove が使える

補足

  • UniRxはイベントの上位互換
  • UniRxでイベント操作もコルーチンもなんでも取り込んで使えるよ! とのこと

参考

ufcpp.net