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」とかすれば使えますが)
コメント