Приведем несколько примеров прикладного использования корутин

Изменение параметров объекта в течении некоторого времениLink to Изменение параметров объекта в течении некоторого времени

Корутины можно использовать для того, чтобы менять свойства объекта в течение некоторого времени, например, изменять размер объекта за определенное время

[Action(English: "change scale to", Russian: "изменить размер объекта")]  
[ArgsFormat(English: "{%} in {%} sec.", Russian: "{%} за {%} сек.")]  
public IEnumerator ChangeScaleInTime(float scale, float duration)  
{  
    Vector3 startScale = transform.localScale;  
    Vector3 endScale =  Vector3.one * scale;  
  
    float elapsedTime = 0;  
    while (elapsedTime < duration)  
    {        
    transform.localScale = Vector3.Lerp(startScale, endScale, Mathf.Clamp01(elapsedTime / duration));  
        elapsedTime += Time.deltaTime;  
  
        yield return null;  
    }  
    transform.localScale = endScale;  
}
C#

Устранение зависания при большом количестве вычисленийLink to Устранение зависания при большом количестве вычислений

Предположим, нам нужно произвести большое количество “долгих” операций, при этом мы не хотим, чтобы на время их выполнения программа полностью останавливалась. Корутины могут помочь нам, например, позволяя каждое N-ое количество вычислений произвести обработку кадра, не блокируя программу полностью

[Action(English: "do big calculations", Russian: "произвести большие вычисления")]
public IEnumerator DoBigCalculations()
{
	float[] data = new float[100000];
	for (int i = 0; i < 100000; i++)
	{
		data[i] = BigCalculation();
		if (i % 100 == 0)
		{
			yield return new WaitForUpdate();
		}
	}
}
C#

Выполнять последовательность действий, растянутую во времениLink to Выполнять последовательность действий, растянутую во времени

Если есть необходимость последовательно выполнить набор протяженных во времени действий, можно воспользоваться корутиной.

Например, если есть следующая последовательность действий:

  1. Двигаться до игрока
  2. Проиграть приветственную анимацию
  3. Увеличиться в размере

Пример кода для такой последовательности действий

public IEnumerator DoActionsSpedOverTime()  
{  
    yield return StartCoroutine(MoveToPlayer());  
    yield return StartCoroutine(PlayWelcomeAnimation());  
  
    float newScale = 2f;  
    float changeScaleDuration = 3f;  
  
    yield return StartCoroutine(ChangeScaleInTime(newScale, changeScaleDuration));  
}
C#