C# 避免UI按钮在快速单击后运行函数两次

C# 避免UI按钮在快速单击后运行函数两次,c#,unity3d,C#,Unity3d,如果在短时间内(意外)单击两次或更多次,如何避免UI按钮运行函数两次 我有一个UI按钮,在我的游戏脚本中调用StartName函数。我将脚本附加到inspector中的按钮上。该函数设置一些变量,以便游戏开始 如果我不小心很快地点击了两次按钮,那么start函数将执行两次,从而使我的变量出错。我如何避免这种情况 我正在考虑拆分函数,以便它检查是否已经启动,但这似乎有点复杂。Unity UI中是否有标准设置或我遗漏的一些标准代码?尝试谷歌,但运气不太好 我的代码的简化示例: public void

如果在短时间内(意外)单击两次或更多次,如何避免UI按钮运行函数两次

我有一个UI按钮,在我的游戏脚本中调用StartName函数。我将脚本附加到inspector中的按钮上。该函数设置一些变量,以便游戏开始

如果我不小心很快地点击了两次按钮,那么start函数将执行两次,从而使我的变量出错。我如何避免这种情况

我正在考虑拆分函数,以便它检查是否已经启动,但这似乎有点复杂。Unity UI中是否有标准设置或我遗漏的一些标准代码?尝试谷歌,但运气不太好

我的代码的简化示例:

public void StartGame() {

MenuAnimator.SetBool ("Startbutton", false); // animates my start game panel off the screen.
lives = lives - 1;
Do Rest of Code();
}

在这种情况下,多次单击UI菜单“开始游戏”按钮会导致两条或更多生命被扣除

由于我无法发表评论,以下是我的答案。 您可以锁定变量

首先创建一个锁

private readonly object _locker = new object();
在锁定属性集合/获取中

get { lock (_locker) { return this.myVar; } }
set { lock (_locker) { this.myVar = value; } }
现在可以使用

public void MethodA()
{
    lock(_locker)
    {
        if(myVar == 1)
          myVar = 0;
    }
}

这主要用于多线程,但它应该可以为您完成这项工作。

由于我不能发表评论,以下是我的答案。 您可以锁定变量

首先创建一个锁

private readonly object _locker = new object();
在锁定属性集合/获取中

get { lock (_locker) { return this.myVar; } }
set { lock (_locker) { this.myVar = value; } }
现在可以使用

public void MethodA()
{
    lock(_locker)
    {
        if(myVar == 1)
          myVar = 0;
    }
}

这主要用于多线程,但它应该可以为您完成这项工作。

不需要锁,只要有一个布尔值,每次单击都会翻转,只有布尔值为真时按钮才会触发响应

首先单击->真->响应


第二次单击->错误->返回。

不需要锁定,只要有一个布尔值来翻转每次单击,按钮仅在布尔值为真时触发响应

首先单击->真->响应


第二次单击->错误->返回。

像这样的东西怎么样?这将防止在1秒内发生双击(或您想要的次数)

或者,假设计时器已正确初始化,则可以使用是否启用计时器作为标志。我喜欢有一个单独的标志,虽然可读性


完全公开-我在一个酒吧在我的手机上输入这个,所以它未经测试,但我认为应该可以

像这样的东西怎么样?这将防止在1秒内发生双击(或您想要的次数)

或者,假设计时器已正确初始化,则可以使用是否启用计时器作为标志。我喜欢有一个单独的标志,虽然可读性


完全公开-我在一个酒吧在我的手机上输入这个,所以它未经测试,但我认为应该可以

你可以设置一个标志(bool)并在X秒后重置它。如果您需要更多详细信息,请在问题上张贴您的按钮代码。您可以设置一个标志(bool)并在X秒后重置它。如果您需要更多详细信息,请在您的问题上张贴您的按钮代码。Lol@在酒吧中回答StackOverflow上的问题!Lol@在酒吧回答有关StackOverflow的问题!