Unity C# Уроки: Корутины (Coroutines) — просто и понятно

Корутины — мощный инструмент в Unity, позволяющий выполнять код через определённые промежутки времени или ждать завершения других операций. Это особенно полезно для создания эффектов, анимаций и игровой логики, требующих отложенного выполнения.

Что такое корутина?

Для создания объектов, например, звёздочек, функции Start и Update не всегда подходят: Start создаёт объекты один раз, а Update — каждый кадр. Корутины позволяют создавать объекты с заданной частотой.

Создание и запуск корутин

Для создания корутины используется ключевое слово IEnumerator. Название корутины должно соответствовать правилам именования функций.

Пример:

IEnumerator ShowObjects() { }

Для запуска корутины используется функция StartCoroutine(). Без StartCoroutine() корутина не запустится.

Пример запуска корутины ShowObjects:

StartCoroutine(ShowObjects());

Управление временем выполнения корутины

Ключевое слово yield return new WaitForSeconds(seconds) приостанавливает выполнение корутины на указанное количество секунд.

Пример: создание объекта через 1.5 секунды после нажатия клавиши F:

void Update() {
    if (Input.GetKeyDown(KeyCode.F)) {
        StartCoroutine(ShowObject());
    }
}

IEnumerator ShowObject() {
    yield return new WaitForSeconds(1.5f);
    Instantiate(objectPrefab, transform.position, Quaternion.identity);
}

Корутины и циклы

Корутины можно использовать в циклах для выполнения повторяющихся действий через заданные промежутки времени. Например, для создания объектов в случайных позициях:

IEnumerator CreateObjects() {
    while (true) {
        Instantiate(objectPrefab, new Vector3(Random.Range(-10f, 10f), 0f, Random.Range(-10f, 10f)), Quaternion.identity);
        yield return new WaitForSeconds(1.5f);
    }
}

Однократное выполнение действия с помощью Invoke()

Функция Invoke() позволяет выполнить функцию один раз через заданное время. Она полезна для однократных действий, в отличие от корутин, часто используемых для циклических процессов.

Пример:

void Start() {
    Invoke("InstObject", 2f);
}

void InstObject() {
    Instantiate(objectPrefab, new Vector3(Random.Range(-10f, 10f), 0f, Random.Range(-10f, 10f)), Quaternion.identity);
}

Корутины — незаменимый инструмент в Unity для реализации различных игровых механик, требующих отложенного выполнения кода. yield return new WaitForSeconds() позволяет управлять временными интервалами, а Invoke() — выполнять одноразовые действия. Понимание работы корутин поможет создавать более сложные и интересные игры.

Что будем искать? Например,программа