Как сделать задержку цикла без корутин?

Пришлось избавиться от корутин, так-как выяснилось, что WaitForSeconds и другие на мобилах работают только при значениях 0.1f и выше, или null, что будет также как и 0.1f, а нужно быстрее, то есть 0.01f, к примеру, и сколько я не пытался, ничего не вышло.

Задача стоит сделать свой таймер, на любое значение по времени, вне функции Update, ибо этот метод не используется, так как завязка происходит на кнопке UI при нажатии на которую вызывается метод.

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

Попытался написать метод:

public static float timer;
public static bool Wait(float seconds) {
    float timerMax = seconds;
    timer += Time.deltaTime;
    return timer >= timerMax;
}

А после использовать его в цикле:

private void OnStart() {
    while (true) {
        if (Wait(0.01f)) {
            //....
        }
    }
}

Результат не дало, сколько бы я не ставил в Wait(22f);, всё срабатывает мгновенно, без задержки.

Тут я понял, что Time.deltaTime возвращает одно и тоже значение и не меняется и служит для работы Update метода.

Пытался также сделать и через Time.time но и этот метод постоянно возвращает одно и тоже значение.

И вот тут то я встал в ступор, как же правильно сделать таймер, который будет задерживать цикл, на нужное количество секунд?


Ответы (1 шт):

Автор решения: Yaroslav

Вариант без корутины...

private float _timer;

private void Update () {
    _timer += Time.deltaTime;
    while (_timer >= 0.1f) {
        _timer -= 0.1f;
        Step();
    }
}

private void TimeStep () {
    // Каждые 0.1 сек
}

Только я вообще не понял зачем нужен ровный временной шаг для раскрутки колеса...

Почему бы просто не

private void Update () {
    WheelRotationSpeed += Time.deltaTime*Accelerate;
}

Не одеваете ли вы штаны через голову?

→ Ссылка