Unity C#でDelegate&Callbackを使う
かずまです。
今回はUnityのC#でDelegateとCallbackを使って見たいと思います。
使い方
public class DelegateTest : MonoBehaviour { public delegate void Callback (); private Callback callback; }
こんな感じ。
コレに関数を渡してあげるメソッドを準備します。
public class DelegateTest : MonoBehaviour { public delegate void Callback (); private Callback callback; public void SetCallback (Callback _callback) { this.callback = _callback; } public void AddCallback (Callback _callback) { this.callback += _callback; } }
Setは一つの関数のみ実行可能で、Addは登録された分を一気に実行可能です。
実際に使ってみる
今回はボタンの処理をさせて見ます。
*Defenseの文字が間違ってます。。。すみません笑
上の3つで切り替えて下のボタン一つでその関数を実行します。
前回の記事でUnityのUIボタンの処理をさせるのを書きましたが、今回はまた別の方法で処理を変えます。
kazumalab.hatenablog.com
下のボタンの中身はこの関数を設定しておきます。
コードは先程のに追記します。
ボタンで呼び出すのはClickButtonメソッドですね。
今度は上の3つのボタンを設定します。
以下のコードのClickAttack, ClickDefense, ClickDamageをボタンに設定します。
DelegateTestを読み込み、SetCallbackを呼びます。その引数としてセットしたいメソッドを入れてあげます。これでDelegateTest側でAttack, Defense, Damageが呼び出されます。
つまり、DelegateTest.csは追記せず、コードの処理を増やすことができます。
あとはタイミングも好きなタイミングでできるので今回はボタンのおした時にしてあります。
最後に
はじめはわからなかったのですが書いてみると結構便利だな、と実感しました。
いいですね。
追記
18/9/9
スコープを間違えていたのを修正しました。
コメントありがとうございました。