facebook twitter hatena line email

「Unity/Csharp/Delegate」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「==delegateとは== 独自イベントを生成できるもの。httpのレスポンスなど少し待たないとレスポンスが戻ってこないところで使う。...」)
 
(delegateのサンプル)
行3: 行3:
  
 
==delegateのサンプル==
 
==delegateのサンプル==
 +
"やっほー"をリクエストすると1/2の確率で"やっほー"を返してくれるサンプル
 +
*Mountain.cs
 +
<pre>
 +
using System.Collections;
 +
using System.Collections.Generic;
 +
using UnityEngine;
 +
public class Mountain : MonoBehaviour {
 +
    private string msg;
 +
    public enum ResponseType
 +
    {
 +
        Success,
 +
        Faild,
 +
        NetworkError
 +
    }
 +
    public delegate void CustomCallback(ResponseType responseType);
 +
    private CustomCallback callbacks;
 +
    public void addCallback(CustomCallback callback)
 +
    {
 +
        callbacks += callback;
 +
    }
 +
    public void Exec(string msg)
 +
    {
 +
        // 1/2の確率で成功
 +
        if (Random.Range(-10.0f, 10.0f) > 0) {
 +
            this.msg = msg;
 +
            callbacks(ResponseType.Success);
 +
        } else {
 +
            this.msg = "";
 +
            callbacks(ResponseType.Faild);
 +
        }
 +
    }
 +
    public string GetMessage() {
 +
        return msg;
 +
    }
 +
}
 +
</pre>
 +
 +
呼び出し元
 +
NewBehaviourScript.cs
 +
<pre>
 +
public class NewBehaviourScript : MonoBehaviour {
 +
    Mountain mountain;
 +
    // 送信
 +
    void Start () {
 +
        GameObject gameObj = new GameObject();
 +
        mountain = gameObj.AddComponent<Mountain>();
 +
        mountain.addCallback(OnResponse);
 +
        mountain.Exec("やっほー");
 +
    }
 +
    // 受信
 +
    public void OnResponse(Mountain.ResponseType responseType)
 +
    {
 +
        Debug.Log("onResponse=" + responseType);
 +
        if (mountain)
 +
        {
 +
            if (responseType.Equals(mountain.ResponseType.Success))
 +
            {
 +
                Debug.Log("msg=" + mountain.GetMessage());
 +
            }
 +
            else if (responseType.Equals(mountain.ResponseType.Faild))
 +
            {
 +
                Debug.Log("msg=" + mountain.GetMessage());
 +
            }
 +
        }
 +
    }
 +
}
 +
</pre>
  
 
==httpでdelegateを使った例==
 
==httpでdelegateを使った例==
 
[[unity/Csharp/Request]] [ショートカット]
 
[[unity/Csharp/Request]] [ショートカット]

2018年11月15日 (木) 00:53時点における版

delegateとは

独自イベントを生成できるもの。httpのレスポンスなど少し待たないとレスポンスが戻ってこないところで使う。

delegateのサンプル

"やっほー"をリクエストすると1/2の確率で"やっほー"を返してくれるサンプル

  • Mountain.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Mountain : MonoBehaviour {
    private string msg;
    public enum ResponseType
    {
        Success,
        Faild,
        NetworkError
    }
    public delegate void CustomCallback(ResponseType responseType);
    private CustomCallback callbacks;
    public void addCallback(CustomCallback callback)
    {
        callbacks += callback;
    }
    public void Exec(string msg)
    {
        // 1/2の確率で成功
        if (Random.Range(-10.0f, 10.0f) > 0) {
            this.msg = msg;
            callbacks(ResponseType.Success);
        } else {
            this.msg = "";
            callbacks(ResponseType.Faild);
        }
    }
    public string GetMessage() {
        return msg;
    }
}

呼び出し元 NewBehaviourScript.cs

public class NewBehaviourScript : MonoBehaviour {
    Mountain mountain;
    // 送信
    void Start () {
        GameObject gameObj = new GameObject();
        mountain = gameObj.AddComponent<Mountain>();
        mountain.addCallback(OnResponse);
        mountain.Exec("やっほー");
    }
    // 受信
    public void OnResponse(Mountain.ResponseType responseType)
    {
        Debug.Log("onResponse=" + responseType);
        if (mountain)
        {
            if (responseType.Equals(mountain.ResponseType.Success))
            {
                Debug.Log("msg=" + mountain.GetMessage());
            }
            else if (responseType.Equals(mountain.ResponseType.Faild))
            {
                Debug.Log("msg=" + mountain.GetMessage());
            }
        }
    }
}

httpでdelegateを使った例

unity/Csharp/Request [ショートカット]