Страницы

Поиск по вопросам

суббота, 6 июля 2019 г.

Audio playing loop в Update

Задача: при открытии игрового окна, начинается отсчёт времени, от 7 секунд до 0, при достижении 0 игровое окно закрывается, при этом отсчёт таймера должен сопровождаться звуком (тиканье часов).
Проблема: зацикливается звук. Сейчас реализация находится в Update, Как исправить ситуацию, что бы звук проигрывался раз в секунду в такт таймера и при этом не находился в условии Update ?
Код:
private bool isTimerActive = false; private float currentTimer = 7;
void Update() { if (isTimerActive) { AudioManager.Instance.PlaySound(pointerAudioTimer, 1f); // аудио currentTimer -= Time.deltaTime; timerText.text = currentTimer.ToString ("#"); } if(currentTimer <= 0) Close(); }
public void Show() // Открытие окна { if (currentActive) return;
isTimerActive = true; // определяет начало запуска таймера }


Ответ

Не лучше ли будет запустить корутину в Show?
А так как нет особого смысла каждый кадр обновлять текст(зачем лишние перерисовки), то монжо раз в 100мс менять. Звук нужно 7 секунд крутить, значит будет 70 тиков.
public void Show() // Открытие окна { StartCoroutine(PlaySound()); }
private IEnumerator PlaySound() { int counter = 70; // примерно 7 секунд будет длиться while (counter > 0) { timerText.text = (counter / 10).ToString ("#"); if(counter % 10 == 0) AudioManager.Instance.PlaySound(pointerAudioTimer, 1f); // аудио раз в секунду
// обновляем текст и запускаем звук каждые 100мс. yield return new WaitForSeconds(0.1f); counter--; }
Close(); }
Единственное, я не знаю, как запуск звука у вас работает. Если AudioManager.Instance.PlaySound проигрывает звук один раз, то так. Если оно зацикленно проигрывает, то перед while запускайте, а после отключайте.

Комментариев нет:

Отправить комментарий