onClick.invoke与单击按钮

时间:2016-03-25 06:00:52

标签: c# unity3d

来自其他视觉语言;我确实注意到Unity没有遵循相同的内部工作原理。

我有一个带按钮的UI;当你按下它时,按钮的名称告诉一个功能哪个面板必须可见;通过这种方式,我可以根据按下的按钮隐藏和显示各种面板,而不用担心在UI中设置每个按钮。

现在,如果你使用UI,这是有效的;因为事件系统能够拦截按下的按钮并存储按钮本身的名称;但如果你通过onClick.Invoke做同样的事情;这不起作用。

按钮调用的功能被正确调用;但是事件系统对调用按钮的名称一无所知,因为在UI中没有调用任何按钮。

// this end up with the variable raising a null exception, when called 
// from the onClick.Invoke()
string buttonname = EventSystem.current.currentSelectedGameObject.name;

期望wa onClick.Invoke将具有与UI上的点击/点击相同的效果,但事实并非如此。这有什么解决方法吗?我想调用我通过按钮调用的函数,但我依靠按钮的名称来执行某些操作。

我可以更改函数来解决这个限制,但在此之前,我想确保没有其他方法可以通过代码实际执行此操作。

1 个答案:

答案 0 :(得分:0)

我对这个问题不太确定。如果要获取调用onClick函数的按钮的名称。那你为什么不用onclick按钮返回this.name

无论如何,你在MethodBase.Invoke和MonoBehaviour.Invoke之间让你自己困惑于UnityEvent.Invoke。目前您正在使用UnityEvent.Invoke。

如果您想使用另一个,请先使用尊重的命名空间。

对于MethodBase.Invoke,你说它在Reflection命名空间中。

using System.Reflection;

 private Action myAction = ()=>{};

 void Start()
 {
    System.Type ourType = this.GetType(); 

    MethodInfo mi= ourType.GetMethod("MyMethod", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);

    if (mi!= null){
        myAction = (Action)Delegate.CreateDelegate(typeof(Action), this, mi);
    }
 }