Delegateについて | Unity Forum | Tech Stadium Forum

通知
すべてクリア

Delegateについて  

  RSS

Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
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 2年前 2回 by Student

引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1318
09/01/2022 5:05 pm  

①ざっくり言いますと、「デリゲートとは関数を入れられる変数」です。別の関数に入れ替えることもできますし+=演算子を用いて複数のメソッドを設定することも可能ですので、デリゲートのメリットとしてはその認識で良いと思います。

②イベント処理(ボタンのクリックイベントなど)が挙げられます。

③コードからPrefabを生成してそのオブジェクトをクリックしたときに何か処理を実行するというケースがあれば使用できるかと思います。
あくまで一例ですが、RPGで「モンスターを出現させて、そのモンスターをクリック(タップ)したときに攻撃(関数を実行)する」といった使い方が出来ます。
UnityにおいてはSystem.ActionSystem.Funcを使えば、デリゲートの形式を宣言する必要がありませんのでこちらの方が楽に使えるかもしれません。

デリゲート(Delegate)やイベント(Event)とは【C#】

uGUIのイベントコールバック登録をコードから行う方法とUnityActionデリゲート群

Unity コールバックの受け取り方あれこれ

【LINQの前に】ラムダ式?デリゲート?Func<T, TResult>?な人へのまとめ【知ってほしい】


返信引用
共有:
タイトルとURLをコピーしました