在 unity2D 中的 onMouseDown() 函数之间等待一段时间
Wait for some time in between onMouseDown() function in unity2D
我已经统一构建了这个 2D 项目,您可以在其中点击块,然后使用 onMouseDown() 函数将其销毁。我的问题是在点击一个方块后它被破坏了,我怎样才能让玩家等待一定的时间才能点击游戏中的另一个方块。我试过使用 PlayerPrefs 并从某个浮点变量中减去 Time.deltaTime 但它没有用。
注意:所有方块共享同一个销毁脚本!!!
如果它们共享相同的脚本,您可以从定义静态布尔变量和静态事件开始,比如:
public static bool isLockedDown = false;
public static event Action onBlockDestroyed;
然后,在销毁功能上,首先检查一下这个锁定。如果这是 false,则销毁,将锁转为 true,并调用将由另一个脚本读取的静态侦听器,该脚本将启动一个协程,在给定的秒数后将此静态锁转为 false。
public class Block : MonoBehaviour {
void DestroyBlock()
{
if(isLockedDown)
return;
isLockedDown = true;
onBlockDestroyed.Invoke();
////destroy block///
}
}
public classBlockManager : MonoBehaviour {
void Awake()
{
Block.onBlockDestroyed += BeginUnlocking
}
void BeginUnlocking()
{
StartCoroutine(UnlockTimer);
}
IEnumerator UnlockTimer()
{
yield return new WaitForSeconds(1f);
BLock.isLockedDown = false;
}
}
float waitTime = 1.5f;
static float lastClickTime = float.NegativeInfinity;
void OnMouseDown ()
{
float time = Time.time;
if( time > ( lastClickTime + waitTime ) )
{
lastClickTime = time;
DestroyThisBlock();
}
}
我已经统一构建了这个 2D 项目,您可以在其中点击块,然后使用 onMouseDown() 函数将其销毁。我的问题是在点击一个方块后它被破坏了,我怎样才能让玩家等待一定的时间才能点击游戏中的另一个方块。我试过使用 PlayerPrefs 并从某个浮点变量中减去 Time.deltaTime 但它没有用。
注意:所有方块共享同一个销毁脚本!!!
如果它们共享相同的脚本,您可以从定义静态布尔变量和静态事件开始,比如:
public static bool isLockedDown = false;
public static event Action onBlockDestroyed;
然后,在销毁功能上,首先检查一下这个锁定。如果这是 false,则销毁,将锁转为 true,并调用将由另一个脚本读取的静态侦听器,该脚本将启动一个协程,在给定的秒数后将此静态锁转为 false。
public class Block : MonoBehaviour {
void DestroyBlock()
{
if(isLockedDown)
return;
isLockedDown = true;
onBlockDestroyed.Invoke();
////destroy block///
}
}
public classBlockManager : MonoBehaviour {
void Awake()
{
Block.onBlockDestroyed += BeginUnlocking
}
void BeginUnlocking()
{
StartCoroutine(UnlockTimer);
}
IEnumerator UnlockTimer()
{
yield return new WaitForSeconds(1f);
BLock.isLockedDown = false;
}
}
float waitTime = 1.5f;
static float lastClickTime = float.NegativeInfinity;
void OnMouseDown ()
{
float time = Time.time;
if( time > ( lastClickTime + waitTime ) )
{
lastClickTime = time;
DestroyThisBlock();
}
}