如果在短时间内点击(意外)两次或更多次,我如何避免我的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菜单“开始游戏”按钮会导致两个或更多生命被扣除。
答案 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;
}
}
这主要用于多线程,但它应该为你完成工作。