来自其他视觉语言;我确实注意到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上的点击/点击相同的效果,但事实并非如此。这有什么解决方法吗?我想调用我通过按钮调用的函数,但我依靠按钮的名称来执行某些操作。
我可以更改函数来解决这个限制,但在此之前,我想确保没有其他方法可以通过代码实际执行此操作。
答案 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);
}
}