Как прекратить совместную рутину?
Когда выполняются две копрограммы, как остановить первую копрограмму?
GLOBALS.stableTime = 5;
IEnumerator StableWaittingTime ()
{
yield return new WaitForSeconds (1f);
if (GLOBALS.stableTime == 0) {
GameManager.instance.LevelFaildMethod ();
} else {
GameManager.instance.stableWaittingTime.text = GLOBALS.stableTime.ToString ();
GLOBALS.stableTime--;
StartCoroutine ("StableWaittingTime");
}
}
2 ответа:
@Imapler Ответ-Это почти все, что вам нужно. Я бы только добавил, что метод
StopCoroutine
MonoBehaviour
перегружен и имеет 3 типа параметров, поэтому можно остановить множество одноименных сорутинов. Для вашей потребности здесь, просто используйте yield break; вот так:void Start () { StartCoroutine (StableWaittingTime ()); } IEnumerator StableWaittingTime () { yield return new WaitForSeconds (1f); if (false) { // do something } else { // do something StartCoroutine (StableWaittingTime ()); yield break; } }
Существует три способа, чтобы остановить сопрограммы. Во-первых, это вызов StopAllCoroutines. Второй-вызвать StopCoroutine. И третье - сделать йилд-брейк изнутри корутины.
StopAllCoroutines остановить все сопрограммы, StopCoroutine остановить все сопрограммы с указанием наименования и выхода перерыва остановок, что сопрограмма. Стоит отметить, что и StopAllCoroutines, и StopCoroutine могут остановить корутин только тогда, когда корутин достигает доходности.
Так что если у вас две сопрограммы с тем же именем, и вы хотите, чтобы остановить тот, который вы выполняете в вас сделать yeild перерыв. Интересно, что если вы хотите остановить любую другую сопрограмму, кроме той, которую вы выполняете, вы вызываете StopCoroutine из этой сопрограммы.