Итак, вот что происходит:
Я собираюсь разбить код в вашем посте по одной строке за раз:
while (a){
- Если
a
ложно, сопрограмма немедленно выходит (переход к 9), и больше ничего не происходит, в противном случае продолжайте
if(b){
- , если
b
ложь, перейти к 7, в противном случае продолжить
Debug.Log("test-1");
- вывести «test-1» на консоль
yield return new WaitForSeconds(1f);
- Здесь мы создаем объект, который при его возврате в систему Unity, которая обрабатывает сопрограммы (т. Е.
StartCoroutine()
), выполнение этой функции будет приостановлено и возвращено позднее.В этом случае через 1 секунду (где это значение изменяется текущим Time.timeScale
).Когда выполнение возобновится, перейдите к следующему шагу:
Debug.Log("test-2");
- вывести «test-2» на консоль
Debug.Log("test-3");
- вывести «test-3» на консоль
yield return break;
- Здесь мы говорим базовой системе Unity обоим:(1) приостановить выполнение этой функции (
yield
) и (2), чтобы не возобновить ее позднее (break
).Не переходите к шагу 8.
} //end while(a)
- Благодаря шагу 7 мы никогда не возвращаемся к условному оператору while и никогда не выполняем никаких дополнительных действий.
} //end function
Поэтому для ответа на ваш вопрос «test-1» будет напечатанровно один раз ... если оба значения a
и b
верны.