Корутины (Coroutine)

Содержание

Слайд 2

Каждый скрипт Unity имеет две важные функции:Start() и Update(). В то

Каждый скрипт Unity имеет две важные функции:Start() и Update().
В то время

как первый вызывается, когда объект включается после создания, второй вызывается в каждом кадре. По замыслу следующий кадр не может начаться до тех пор, пока Update не прекратил свою работу. Это вводит сильное конструктивное ограничение: Update() не может легко моделировать события, которые длятся более одного кадра.
Слайд 3

События, происходящие в нескольких кадрах (такие как анимация, диалоги, ожидание и

События, происходящие в нескольких кадрах (такие как анимация, диалоги, ожидание и

т. д.), кодировать сложнее. Это потому, что их логика не может быть записана в последовательном потоке. Он должен быть фрагментирован, распределен по нескольким кадрам. Это часто приводит к тому, что код не только сложнее написать, но и сложнее поддерживать.
Слайд 4

Слайд 5

Корутины (Coroutines, сопрограммы) в Unity — простой и удобный способ запускать

Корутины (Coroutines, сопрограммы) в Unity — простой и удобный способ запускать

функции, которые должны работать параллельно в течение некоторого времени. 
Слайд 6

Корутины выполняются параллельно с основным кодом, параллельно не значит асинхронно. То

Корутины выполняются параллельно с основным кодом, параллельно не значит асинхронно. То

есть, если вы напишите свой "тяжелый" код в кучу корутин которые будут работать параллельно, программа работать быстрее не будет.
Слайд 7

Слайд 8

Пример: корутина, которая уменьшает яркость объекта IEnumerator Fade() { for (float

Пример: корутина, которая уменьшает яркость объекта
IEnumerator Fade() {
for (float ft

= 1f; ft >= 0; ft -= 0.1f) {
Color c = renderer.material.color;
c.a = ft;
renderer.material.color = c;
yield return null;}
} void Update() {
if (Input.GetKeyDown("f")) {
StartCoroutine("Fade"); }
}
Слайд 9

IEnumerator YouCoroutin(){ //описание функции yield return …. ; //здесь несколько вариантов}

IEnumerator YouCoroutin(){
//описание функции
yield return …. ;
//здесь несколько вариантов}

Слайд 10

Корутины представляют собой простые C# итераторы, возвращающие IEnumerator и использующие ключевое слово yield.

Корутины представляют собой простые C# итераторы, возвращающие IEnumerator и использующие ключевое слово yield. 

Слайд 11

Итератор — это поведенческий паттерн проектирования, который даёт возможность последовательно обходить

Итератор — это поведенческий паттерн проектирования, который даёт возможность последовательно обходить элементы

составных объектов, не раскрывая их внутреннего представления.
Слайд 12

Аналогия из жизни –прогулка по не знакомому городу

Аналогия из жизни –прогулка по не знакомому городу

Слайд 13

Yield, что это? Эта команда, отдает процессорное время основному потоку и

Yield, что это?

Эта команда, отдает процессорное время основному потоку и продолжает

выполнение корутины с этого места когда произойдет необходимое событие
Слайд 14

При использовании WaitForSeconds создается долго существующий объект в памяти (управляемой куче),

При использовании WaitForSeconds создается долго существующий объект в памяти (управляемой куче), поэтому его

использование в быстрых циклах может быть плохой идеей.
Слайд 15

Как завершить корутину? Иногда корутину нужно завершить преждевременно. Для это есть

Как завершить корутину?

Иногда корутину нужно завершить преждевременно. Для это есть несколько

путей.
StopAllCoroutines()
StopCoroutine(«YourCoroutine»)
Уничтожить родительский GameObject
Слайд 16

Слайд 17

Почирпапавптать: https://refactoring.guru/ru/design-patterns/iterator https://professorweb.ru/my/csharp/charp_theory/level12/12_20.php https://docs.microsoft.com/ru-ru/dotnet/csharp/iterators https://you-hands.ru/2020/11/25/korutiny-v-unity-chto-eto-i-kak-ispolzovat/ https://www. alanzucconi.com/2017/02/15/ne ted-coroutines-in-unity/ https://docs.unity3d.com/ru/2019.4/Manual/Coroutines.html

Почирпапавптать:

https://refactoring.guru/ru/design-patterns/iterator
https://professorweb.ru/my/csharp/charp_theory/level12/12_20.php
https://docs.microsoft.com/ru-ru/dotnet/csharp/iterators
https://you-hands.ru/2020/11/25/korutiny-v-unity-chto-eto-i-kak-ispolzovat/
https://www.
alanzucconi.com/2017/02/15/ne
ted-coroutines-in-unity/
https://docs.unity3d.com/ru/2019.4/Manual/Coroutines.html

Слайд 18

Варианты 1.Продолжить после следующего FixedUpdate yield return new WaiЗадание. tForFixedUpdate(); 2.

Варианты

1.Продолжить после следующего FixedUpdate
yield return new WaiЗадание.
tForFixedUpdate();
2. Продолжитv
yield return new WaitForEndOfFrame();
4.

Продолжить после другой корутины:
yield return StartCoroutine(AnotherCoroutine());
5. После текущего Update
yield return null;
6. По завершении скачивания
yield return new WWW(someLink);
7. Завершить корутину
yield return break;