Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Зачем нужен IEnumerator(Корутина), если можно использовать обычные методы? Обьясните новичку, в чем его прикол? (Unity)

Malakson_Maltrikson Мастер (1168), на голосовании 11 месяцев назад
Я так и не понял, его там как-то прекращать можно, что-то там вписывать.... Но причем это - не деление на потоки. Черт пойми, что с этой корутиной...
Голосование за лучший ответ
Xttx Мыслитель (8536) 1 год назад
Если в обычном методе в цикле, менять объекту позицию, то анимации не получится, потому что весь цикл выполнится в один кадр.

А в курутине можно так:

for (int i = 0; i < 100; i++) {
transform.position += new Vector3(0.1f, 0f, 0f);

//после выполнения следующей команды, цикл будет останавливаться, и дальше будут довыполняться другие скрипты, потом кадр идёт на рендер, а в следующем кадре - оно продолжит с этого же места

yield return null;
}
Malakson_MaltriksonМастер (1168) 1 год назад
Вопросик - что означает строчка yield return null? Что она возвращает, и почему заканчивает действие?
Xttx Мыслитель (8536) Malakson_Maltrikson, Возвращает null, но в принципе возвращать можно что угодно, тут смотреть надо больше не на то что возвращает, а на то как. В этом месте происходит выход из функции, как будто бы это был обычный return, но yield говорит, что в следующем кадре нужно продолжить с этого же места, с сохранением значений всех локальных переменных.
XttxМыслитель (8536) 1 год назад
Просто обрабатывай свою AnimationCurve в курутине, в цикле, как ты бы это делал в обычном методе. И внутри этого цикла, в конце, воткни "yield return null;". В месте вызова прыжка, впиши "StartCoroutine(jump_coroutine);" (ну, или как ты там её назовёшь). Да, в принципе, и всё.
Похожие вопросы