Подождите некоторое время между функцией onMouseDown () в unity2D - PullRequest
0 голосов
/ 18 декабря 2018

Я построил этот 2D-проект в единстве, где вы нажимаете на блоки, и они разрушаются с помощью функции onMouseDown ().Моя проблема в том, что после постукивания по блоку он разрушает, как я могу заставить игрока ждать некоторое время, прежде чем он сможет нажать на другой блок в игре.Я пытался использовать PlayerPrefs и вычитать Time.deltaTime из определенной переменной с плавающей точкой, но это не сработало.

Примечание: все блоки используют один и тот же скрипт уничтожения !!!

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018
float waitTime = 1.5f;
static float lastClickTime = float.NegativeInfinity;

void OnMouseDown ()
{
    float time = Time.time;
    if( time > ( lastClickTime + waitTime ) )
    {
        lastClickTime = time;
        DestroyThisBlock();
    }
}
0 голосов
/ 18 декабря 2018

Если они все используют один и тот же сценарий, вы можете начать с определения статической переменной bool и статического события, скажем:

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;
    }
}
...