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

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

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

Например, изменять размер объекта:

[Action(English: "make object bigger", Russian: "сделать объект больше")]
    public IEnumerator MakeObjectBigger()
    {
        Vector3 startScale = transform.localScale;
        Vector3 endScale = transform.localScale + Vector3.one;
        float maxTime = 5;
        float elapsedTime = 0;
        while (elapsedTime < maxTime)
        {
            transform.localScale = Vector3.Lerp(startScale, endScale, Mathf.Clamp01(elapsedTime / maxTime));
            yield return new WaitForUpdate();
            elapsedTime += Time.deltaTime;
        }
        transform.localScale = endScale;
    }

Устранение зависания при большом количестве вычислений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();
            }
        }
    }