코루틴(Coroutine)은 시간 지연이나 비동기 처리가 필요한 작업을 순차적으로 실행할 수 있게 해주는 기능이다.
예를 들어 특정 이벤트 후 몇초를 기다린 후 동작을 실행하거나, 여러 프레임으로 나눠서 동작을 처리할 때 사용할 수 있다.
코루틴은 .NET의 IEnumerator 인터페이스와 yield 키워드를 통해 사용한다.
유니티에서는 이를 통해 루프마다 특정 시점에서 코드를 중단한 후 다시 시작 할 수 있도록한다.
코루틴 시작 -> 코루틴 함수 동작 -> yield 를 반환, 일정 시간(프레임) 중단 -> 이어서 진행
이때 yield는 다음과 같은 형태를 가질 수 있다.
이러한 코루틴은 멀티스레드로 착각하기 쉽지만 멀티스레드가 아니다.
유니티에서의 Thread나 Task를 사용한 비동기 처리와는 다르다.
유니티의 코루틴은 루프 함수 Update, FixedUpdate등에서 매 프레임마다 상태를 체크한다.
Update, FixedUpdate등은 유니티의 메인스레드에서 호출되므로 코루틴은 멀티스레드가 아니다.
즉 코루틴은 게임루츠의 일부로써 작동한다.
StartCoroutine(ExampleCoroutine())
IEnumerator ExampleCoroutine() {
Debug.Log("Start");
yield return new WaitForSeconds(2f);
Debug.Log("End");
}
코루틴은 IEnumerator를 반환하는 함수를 선언한 뒤 StartCoroutine 메서드로 사용할 수 있다.
위 코드는 Start를 출력한 뒤 2초 뒤에 End를 출력한다.