Actionを引数として渡すときの注意点

UnityでAction型の変数を引数として渡す場合に少しつまづいたのでメモ。


public class TestClass : MonoBehaviour {
  public static void TestMethod(){
    Debug.Log("test");
  }
}

こんなクラスにあるこんなメソッドを渡したいとします。

このとき、

Sample(TestClass.TestMethod());

という間違いを今回してしまったのですが、これだとTestMethod()の返り値voidが渡されてしまいます。

エラー表示は以下の通り。

The best overloaded method match for `ClassName.Sample(System.Action)’ has some invalid arguments

Argument `#1′ cannot convert `void’ expression to type `System.Action’

Actionを渡すときには最後のカッコを取って

Sample(TestClass.TestMethod);

とするのが正解。

ちゃんと考えてみると当然と言えば当然なのですが、普段あまりAction型を使ったことがなかったので引っかかりました。

UnityにはUnityAction型というのもありますが、これもAction型とほぼ同じだと思います。
UnityActionは引数が4つまでとかいう制約があったような(?)

詳しいことはまた調べてみます。

ちなみにAction型は

using System;

UnityAction型は

using UnityEngine.Events;

しないと使えないので注意!
(もちろん「System.Action」とかすれば使えますが)

コメント