根据我的研究,以下语法适用于设置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;工作