Создание таймера в Unity - PullRequest
0 голосов
/ 04 ноября 2018

У меня проблема в Unity. Мне нужен обратный отсчет в моем проекте. Но этот отсчет будет отсчитываться 2 раза. Например, через 3 секунды будет выполнена работа, через 2 секунды будет выполнена другая работа, и эти работы будут продолжены.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

процедуры (и более сопрограмм)

Сопрограммы делают именно то, что вы хотите сделать.

private IEnumerator Countdown2() {
    while(true) {
        yield return new WaitForSeconds(2); //wait 2 seconds
        //do thing
    }
}

private IEnumerator Countdown3() {
    while(true) {
        yield return new WaitForSeconds(3); //wait 3 seconds
        //do other thing
    }
}

Затем вы запускаете их, вызывая ваш Start() метод (или где-либо еще):

void Start() {
    StartCoroutine(Countdown2());
    StartCoroutine(Countdown3());
}

Обратите внимание, что оба метода обратного отсчета будут работать вечно, если не произойдет одно из трех:

  1. StopCoroutine(...) вызывается, передавая ссылку, возвращаемую StartCoroutine
  2. Функция обратного отсчета сама возвращается (что не произойдет, если она не выйдет из бесконечного цикла while(true))
  3. Сама функция Coundown вызывает yield break

Также обратите внимание, что в случае, если обе сопрограммы должны возобновиться в одно и то же время (например, через 6 секунд), сопрограмма 2 будет выполняться первой (как она была запущена первой), если не вмешивается какой-либо другой эффект (например, один из циклов имеет другой yield инструкция, один из циклов завершен и т. Д.).

0 голосов
/ 04 ноября 2018

На основании примера использования, который вы указали, когда объект сначала поворачивается направо, а затем налево:

рассмотрим объект. Когда программа запустится, поверните направо на 3 секунды, после поворота налево на 1 секунду. они будут повторяться постоянно. два счетчики будут следовать друг за другом.

Ниже я даю вам два таймера, которые выполняются последовательно: первый будет длиться 3 секунды, а второй - 2 секунды. Как только один счетчик заканчивает работу, запускается другой, это будет повторяться в бесконечном цикле.

float counterTask1 = 3f;
float counterTask2 = 2f;
float timer;
bool chooseTask;

void Start(){
    //Initialize timer with value 0
    timer = 0;
    chooseTask = 1;
}

void Update ()
{
    // Add the time since Update was last called to the timer.
    timer += Time.deltaTime;

    // This will trigger an action every 2 seconds
    if(chooseTask && timer >=  counterTask1)
    {
        timer -= counterTask1;
        chooseTask = 0;
        #Do Task 1 Here
    }else if(!chooseTask && timer >= counterTask2)
    {
        timer -= counterTask2;
        chooseTask = 1;
        #Do Task 2 Here
    }
}

Я не уверен, что это то, что вы искали. В любом случае, в Unity уже задано много вопросов о таймерах. Проверьте некоторые из них: https://stackoverflow.com/search?q=timer+in+Unity

...