你好,我正在尝试在一个按钮上有两个onclick事件。然后先执行一个我使用下面的代码,但它同时执行。
void Start() {
someUIButtonReference.onClick.AddListener(SomeFunction1); // first
someUIButtonReference.onClick.AddListener(SomeFunction2); // second
}
void SomeFunction1() {
Debug.Log("SomeFunction1");
}
void SomeFunction2() {
Debug.Log("SomeFunction2");
}
在我看来,你真正想要的是在回调之间交替,每次单击只执行其中一个。
如果你只有两个,你可以简单地使用bool
标志并进行
private bool isSecondClick;
void Start()
{
// Use a wrapper callback instead
someUIButtonReference.onClick.AddListener(HandleClick);
}
private void HandleClick()
{
if(!isSecondClick)
{
SomeFunction1();
}
else
{
SomeFunction2();
}
isSecondClick = !isSecondClick;
}
void SomeFunction1()
{
Debug.Log("SomeFunction1");
}
void SomeFunction2()
{
Debug.Log("SomeFunction2");
}
如果会有更多的回调,那么你可以使用类似的东西
private int index;
private Action[] listeners = new Action[]
{
SomeFunction1,
SomeFunction2,
SomeFunction3,
...
};
void Start()
{
// Use a wrapper callback instead
someUIButtonReference.onClick.AddListener(HandleClick);
}
private void HandleClick()
{
var action = listeners[index];
action.Invoke();
index = (index + 1) % listeners.Length;
}
void SomeFunction1()
{
Debug.Log("SomeFunction1");
}
void SomeFunction2()
{
Debug.Log("SomeFunction2");
}
void SomeFunction3()
{
Debug.Log("SomeFunction3");
}
...
您可以定义一个标志,并在lambda表达式中使用它来在函数之间进行替换。旗帜将被关闭。
bool flag = false;
someUIButtonReference.onClick.AddListener
(
() => flag = !flag ? SomeFunction1() : SomeFunction2()
);