通知
すべてクリア
09/01/2022 5:01 pm
Delegateに関して教えてください。
➀以下のようなコールバックスクリプトを書いてみたのですが、
TestRunAがDelegateを使用して関数を渡した関数で、TestRunBは関数を直接呼び出した関数です。
TestRunA、TestRunB共に同じ結果になりますが、Delegateを使用したTestRunAの場合、別の関数への入れ替えが簡単で、プログラム実行中でも入れ替えることが可能です。
この柔軟性がDelegateを使用するメリットという認識で良いのでしょうか?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestDelegate : MonoBehaviour
{
private delegate string delegateTestObj(string text);
void Start()
{
delegateTestObj delegateTest;
delegateTest = Test1;
TestRunA("Test", delegateTest);
TestRunB("Test");
}
private string Test1(string text)
{
return text;
}
private void TestRunA(string text, delegateTestObj function)
{
Debug.Log(function(text));
}
private void TestRunB(string text)
{
Debug.Log(Test1(text));
}
}
②➀のコールバック関数以外の使用用途はありますか?
③➀と②の具体的な使用例があれば、教えていただきたいです。
This topic was modified 3年前 2回 by Student
09/01/2022 5:05 pm
①ざっくり言いますと、「デリゲートとは関数を入れられる変数」です。別の関数に入れ替えることもできますし+=演算子を用いて複数のメソッドを設定することも可能ですので、デリゲートのメリットとしてはその認識で良いと思います。
②イベント処理(ボタンのクリックイベントなど)が挙げられます。
③コードからPrefabを生成してそのオブジェクトをクリックしたときに何か処理を実行するというケースがあれば使用できるかと思います。
あくまで一例ですが、RPGで「モンスターを出現させて、そのモンスターをクリック(タップ)したときに攻撃(関数を実行)する」といった使い方が出来ます。
UnityにおいてはSystem.ActionとSystem.Funcを使えば、デリゲートの形式を宣言する必要がありませんのでこちらの方が楽に使えるかもしれません。
デリゲート(Delegate)やイベント(Event)とは【C#】