快速点击

时间:2016-08-14 01:09:22

标签: c# unity3d

如果在短时间内点击(意外)两次或更多次,我如何避免我的UI按钮运行两次功能?

我有一个UI按钮,可以在我的游戏脚本中调用StartGame函数。我将脚本附加到检查器中的按钮。该函数设置了一些变量以便游戏开始。

如果我不小心快速点击了两次按钮,启动功能会执行两次,因此它会搞砸我的变量。我该如何避免?

我正在考虑拆分该功能,以便检查它是否已经启动,但这看起来有点复杂。是不是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菜单“开始游戏”按钮会导致两个或更多生命被扣除。

3 个答案:

答案 0 :(得分:3)

不需要锁,只需要一个翻转每次点击的布尔值,按钮只在bool为真时触发响应。

首次点击 - >是的 - >响应。

第二次点击 - > false - >返回。

答案 1 :(得分:1)

这样的事情怎么样?这样可以防止在1秒内发生双击(或者您想要的多次)

1<<r

或者您可能只是使用定时器是否作为标志启用,假设定时器已正确初始化。为了便于阅读,我喜欢单独的旗帜。

完全披露 - 我正在一家酒吧在手机上打字,所以它没有经过测试,但我认为应该有效

答案 2 :(得分:0)

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

首先创建一个锁

private readonly object _locker = new object();

在你的锁定属性set / get

get { lock (_locker) { return this.myVar; } }
set { lock (_locker) { this.myVar = value; } }

现在您可以使用

锁定此MyVar变量
public void MethodA()
{
    lock(_locker)
    {
        if(myVar == 1)
          myVar = 0;
    }
}

这主要用于多线程,但它应该为你完成工作。