从另一个class级点击统一

我有类“button”function

public void SetOnClickListener(UnityAction listener) { btn.onClick.AddListener(listener); } 

我有类“A”与fllow代码

 void D() { Button btn = new Button(); btn.SetOnClickListener(new UnityAction(SomeFunction)); } public void SomeFunction() { Debug.Log("Some Function was called!"); } 

它不起作用。 但是,如果我做下一个改变 – >

 void D() { Button btn = new Button(); btn.SetOnClickListener(new UnityAction(SomeFunction)); } public static void SomeFunction() { Debug.Log("Some Function was called!"); } 

所有工作正常。 为什么我必须使用static ,我可以不使用它?

Solutions Collecting From Web of "从另一个class级点击统一"

因为使用静态方法,所有它需要的是函数索引来存储对它的引用。 但是,当你试图传递成员函数时,它没有引用实例来调用它。

如果你想了解更多关于函数指针的知识,我所知道的最好的方法是尝试用C ++实现委托或者动作。

你可以尝试传递button.onClick.AddListener(delegate { this.SomeFunction(); }); 而不是new UnityAction(...) 。 – 这应该工作,这就是我如何做到这一点。

另外,我猜你有你自己的类Button因为UnityEngine.UI.Button中的构造UnityEngine.UI.Button是受保护的,不能被实例化。