Корутины — мощный инструмент в 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() — выполнять одноразовые действия. Понимание работы корутин поможет создавать более сложные и интересные игры.