@Gagatyn
Самоучка

Почему код продолжает работать после StopCoroutine()?

Здравствуйте. Мигание реализовал через 2 кнопки: 1 темная кнопка, 2 светлая кнопка.
Первая SetActive(false), вторая SetActive(true) и так чередуется...

После StopCoroutine() останавливается мигание и снова продолжается.
Если передать название функции как строку StopCoroutine("myFunc"), то всё работает, но благодаря этому мне придется дублировать функции: "myFunc2", "myFunc3"... потому что кнопок больше 2-х, не хочется дублировать.

Как остановить мигание?
Как написать универсальную функцию для корутинов?

// class Btns
static public Btns S;
private IEnumerator _coroutine;

public void startFI () {
  _coroutine = BlinkindRun (btn1, btn2);
// 1. пробовал _coroutine = StartCoroutine ( BlinkindRun (btn1, btn2) );
  StartCoroutine (_coroutine);
}

public void stopFI () {
 // 2. пробовал _coroutine = BlinkindRun (btn1, btn2);
 // 3. пробовал StopCoroutine ("_coroutine");
 // 4. пробовал StopCoroutine ("BlinkindRun");
  StopCoroutine (_coroutine);
}

private IEnumerator BlinkindRun (GameObject offGO, GameObject onGO) {
        while (true) {
            blinkBtn(offGO, onGO);
            yield return new WaitForSeconds (1f);

            blinkBtn(onGO, offGO);
            yield return new WaitForSeconds (1f);
        }
    }

public void blinkBtn (GameObject offGO, GameObject onGO, bool blinkGO = false) {
        offGO.SetActive (false);
        onGO.SetActive (true);
    }


// class B
private void Awake () {
        UIButton1.onClick.AddListener (onStep1Touch);
        UIButton2.onClick.AddListener (onStep2Touch);
}

private void onStep1Touch () {
  Btns.S.startFI ();
}

private void onStep2Touch () {
  Btns.S.stopFI ();
}
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ответы на вопрос 1
mopsicus
@mopsicus
В startFI два раза запускаете корутину
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы