Coroutine유니티에서 비동기적인 작업을 수행할 때 사용하는 중요한 기능이다.

특정 코드의 실행을 일시 중지했다가 이후 다시 재개할 수 있는 아주 신기한 기능이다.

시간이 걸리는 작업(대기, 애니메이션, 네트워크 요청 등)을 효율적으로 처리할 수 있다고한다.


코루틴의 역할

유니티에서는 기본적으로 Update() 메서드가 프레임마다 실행된다.

하지만 특정 시간 동안 기다렸다 코드를 실행하려면 Coroutine이 필요하다.

  • 프레임 단위로 코드 실행 지연
  • 특정 조건이 만족될 때까지 대기
  • 비동기적 실행(파일 읽기, 네트워크 요청 등)
  • 애니메이션이나 이펙트 동기화

코루틴의 기본 구조

Coroutine을 사용하려면 반환값이 IEnumerator인 메서드를 만들고, StartCoroutine()을 사용해 실행한다.

using System.Collections;
using UnityEngine;

public class CoroutineExample : MonoBehaviour
{
    void Start()
    {
        // 코루틴 실행
        StartCoroutine(MyCoroutine());
    }

    IEnumerator MyCoroutine()
    {
        Debug.Log("코루틴 시작");
        
        // 2초 동안 대기
        yield return new WaitForSeconds(2f);

        Debug.Log("2초 후 실행됨");
    }
}

코루틴의 종류 (yield return 키워드)

코루틴 내부에서 yield return을 사용하면 특정 조건을 만족할 때까지 대기할 수 있다.

WaitForSeconds - 일정 시간 대기

yield return new WaitForSeconds(3f);  // 3초 동안 대기
  • 게임 오브젝트를 3초 후에 활성화하는 등 다양한 연출에 사용

WaitForEndOfFrame - 프레임 끝까지 대기

yield return new WaitForEndOfFrame();
  • 모든 렌더링이 끝난 후 실행. UI 업데이트 후 실행할 때 유용

WaitForFixedUpdate - 다음 FixedUpdate까지 대기

yield return new WaitForFixedUpdate();
  • 물리 연산(Physics)과 관련된 코드에서 사용 (예: Rigidbody 움직임)

WaitUntil - 특정 조건이 참이 될 때까지 대기

yield return new WaitUntil(() => someCondition == true);
  • 특정 조건이 충족될 때까지 대기할 때 사용

WaitWhile - 특정 조건이 거짓이 될 때까지 대기

yield return new WaitWhile(() => someCondition == true);
  • 특정 조건이 계속 참인 동안 대기

null - 다음 프레임까지 대기

yield return null;
  • 현재 프레임이 끝나고 다음 프레임에서 다시 실행

코루틴을 제어하는 방법

StopCoroutine() - 특정 코루틴 중지

StopCoroutine(MyCoroutine());
  • 특정 코루틴만 중지

StopAllCoroutines() - 모든 코루틴 중지

StopAllCoroutines();
  • 해당 오브젝트에서 실행 중인 모든 코루틴을 중지합니다.

yield break; - 현재 코루틴 강제 종료

IEnumerator ExampleCoroutine()
{
    Debug.Log("시작");
    yield return new WaitForSeconds(1f);
    
    Debug.Log("중단됨");
    yield break; // 코루틴 종료

    Debug.Log("이 코드는 실행되지 않음");
}

코루틴과 같이 사용하면 좋은 키워드

키워드 설명
StartCoroutine() 코루틴 실행
StopCoroutine() 특정 코루틴 종료
StopAllCoroutines() 모든 코루틴 종료
yield return null 다음 프레임까지 대기
yield return new WaitForSeconds(x) x초 동안 대기
yield return new WaitUntil(() => 조건) 특정 조건이 참이 될 때까지 대기
yield return new WaitWhile(() => 조건) 특정 조건이 거짓이 될 때까지 대기
yield break; 현재 코루틴 즉시 종료

코루틴 주의할 점

  • Coroutine은 반드시 MonoBehaviour에서 실행해야 한다
  • Coroutine 실행 후 StopCoroutine() 또는 StopAllCoroutines()으로 종료 가능
  • 무한 루프를 방지하기 위해 while문을 사용할 때는 yield return 필수
  • Coroutine은 비동기 실행되므로 타이밍 이슈를 고려해야 한다.

댓글남기기