facebook twitter hatena line email

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

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(Actionサンプル1)
(Actionサンプル2(別クラス呼び出し))
行52: 行52:
 
}
 
}
  
 +
</pre>
 +
 +
===Setup()の部分、ラムダ式の変数に分けると、こうかける===
 +
public class ActionScene : MonoBehaviour
 +
{
 +
    void Start()
 +
    {
 +
        System.Action onAction = () =>
 +
        {
 +
            Debug.Log("callOnAction");
 +
        };
 +
        System.Action offAction = () =>
 +
        {
 +
            Debug.Log("callOffAction");
 +
        };
 +
        var eventActionClass = new EventActionClass();
 +
        eventActionClass.Setup(
 +
            callOnAction: onAction,
 +
            callOffAction: offAction);
 +
    }
 +
}
 
</pre>
 
</pre>
  

2024年11月13日 (水) 10:28時点における版

Actionとは

関数を変数にできるもの

Actionサンプル1

System.Action<string> OnMsg = delegate (string msg) { };
OnMsg += (msg) =>
{
    Debug.Log("msg1:" + msg);
};

// 呼び出し
OnMsg("hello");

ラムダ式だとこうかける

System.Action<string> OnMsg = (msg) =>
{
    Debug.Log("msg1:" + msg);
};

// 呼び出し
OnMsg("hello");

Actionサンプル2(別クラス呼び出し)

public class ActionScene : MonoBehaviour
{
    void Start()
    {
        var eventActionClass = new EventActionClass();
        eventActionClass.Setup(
             callOnAction: () =>
             {
                 Debug.Log("callOnAction");
             },
             callOffAction: () =>
             {
                 Debug.Log("callOffAction");
             });
    }
}
public class EventActionClass
{
    public void Setup(System.Action callOnAction, System.Action callOffAction)
    {
        callOnAction();
        callOffAction();
    }
}

Setup()の部分、ラムダ式の変数に分けると、こうかける

public class ActionScene : MonoBehaviour {

   void Start()
   {
       System.Action onAction = () =>
       {
           Debug.Log("callOnAction");
       };
       System.Action offAction = () =>
       {
           Debug.Log("callOffAction");
       };
       var eventActionClass = new EventActionClass();
       eventActionClass.Setup(
            callOnAction: onAction,
            callOffAction: offAction);
   }

} </pre>

Actionサンプル3引数で渡して戻す

public class ActionScene : MonoBehaviour
{
    void Start()
    {
        System.Action<string> event = (name) =>
        {
            Debug.Log(name); // hogeが返ってくる
        };
        var sampleLogic new SampleLogic();
        sampleLogic.Load(event);
    }
}
public class SampleLogic
{
    public void Load(System.Action<string> event)
    {
        event("hoge");
    }
}