是否可以在一个按钮中有两个点击事件,然后在另一个按钮之前执行一个



你好,我正在尝试在一个按钮上有两个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()
);

相关内容

最新更新