코루틴은 함수의 실행을 중단하고, 특정 조건이 충족될 때 다시 이어서 실행할 수 있는 Unity의 비동기 흐름 제어 기법이다. 코루틴은 C# 의 일반적인 Tread,Task와 다르다. Unity 엔진 루프에 통합되어 있어서, 프레임 단위로 흐름을 제어할 수 있다.
IEnumerator MyCoroutine()
{
Debug.Log("1초 대기 전");
yield return new WaitForSeconds(1f); // 1초 대기
Debug.Log("1초 후 실행");
}
StartCoroutine(MyCoroutine());
StratCoroutine()
호출을 통해 MyCoroutine()
이 호출되고,
MyCoroutine()
의 내부 블록 코드가 실행되면서 yield return new WaitForSeconds(1f);
코드를 통해 1초를 대기한다.
내부 흐름을 좀 더 자세히 살펴보면
IEnumerator
를 루프 큐에 등록하고
매 프레임마다 이 큐를 확인해서 해당 yield
조건이 충족됐는지 확인하고
충족되면 해당 위치에서 MoveNext()
를 호출하여 다음 단계로 넘어간다.
과정을 자세히 정리하면 다음과 같다.