Введение
Coroutine — это функция, которая может ожидать и синхронизировать свой процесс, а также полностью приостанавливать его. Сопрограммы работают со специальным оператором yield, который возвращает выполнение кода из функции, а затем, когда функции продолжают выполняться, выполнение начинается снова с того места, где оно было остановлено.
Начиная
Объявить сопрограмму
Сопрограммы в C# можно определить с помощью ключевого слова IEnumerator, за которым следует имя сопрограммы.
Переменная-член может быть объявлена с использованием member-type, за которым следует имя переменной.
Корутина возвращает тип с оператором yield. Например, доход возвращает значение null;
//Defining Coroutine
public
IEnumerator MyCoroutine()
{
yield return null;
}
Вызов сопрограммы
Сопрограммы можно вызывать с помощью StartCoroutine(Coroutine).
StartCoroutine(MyCoroutine())
Остановить сопрограмму
Сопрограммы можно вызывать с помощью StopCoroutine(Coroutine), тогда как StopAllCoroutines() можно использовать для остановки всех сопрограмм, работающих в этом экземпляре.
//Stop Coroutine
StopCoroutine(MyCoroutine());
//Stop all Coroutine
StartAllCoroutines();
Понимание сопрограмм
Сопрограммы полезны при разработке игры, но использование сопрограмм в игре не считается эффективным, если их не остановить после завершения задачи.
Методы Coroutine могут выполняться по частям с течением времени, но все процессы по-прежнему выполняются одним основным потоком. Если сопрограмма пытается выполнить трудоемкую операцию, все приложение на время зависает.
Пример программы
using UnityEngine;
using System.Collections;
public
class
CoroutineHandler : MonoBehaviour
{
public
void Start()
{
StartCoroutine(MyCoroutine("Jon"));
}
IEnumerator MyCoroutine(string name)
{
print(name);
yield return new WaitForSeconds(5f);
print(name + "Watson");
}
}
Вывод
Джон
*ждет 5 сек*
Джон Уотсон
Вывод
Сопрограммы предоставляют множество функций, которые могут быть очень полезны при разработке игр, но их следует использовать должным образом, чтобы избежать утечек памяти.