使用A代理时Button.onClick.AddListener语法澄清

时间:2015-05-17 16:25:44

标签: c# unity3d

根据我的研究,以下语法适用于设置Unity 4.6+ Button的回调:

_button = GetComponent<Button>();
_button.onClick.AddListener(delegate { Test(); }); //works
_button.onClick.AddListener(Test);//works

public void Test()
{
    Debug.Log("Success");
}

然而,当我试图创建一个委托并传递它无法正常工作时

public delegate void AbilityButtonCallback();
public void SetCallback(AbilityButtonCallback callback)
{
   _button.onClick.AddListener(callback);
}

//ERROR: Error  2   Argument 1: cannot convert from 
'AbilityButtonCallback' to 'UnityEngine.Events.UnityAction'

显然它说它不能在UnityEngine.Events.UnityAction类型中使我的AbilityButtonCallback。但是我从未将Test()声明为该类型,Test()只是一个void函数。那么为什么我可以将Test作为参数传递并且很好,但是如果我尝试传递一个带有void返回类型和0参数的委托它不起作用?

注意:

我知道lambda表达式可以正常工作

_button.onClick.AddListener(() => { callback(); });

但是我不明白为什么你的代表不会传递一个常规的函数指针&#39;工作

0 个答案:

没有答案