[ 개발 공부 ] 싱글 스레드에서 비동기 방식을 구현하는 방법 in Unity Coroutine

2024. 5. 16. 16:00게임 개발/개발 공부

이번에는 Unity Coroutine이 싱글 스레드에서 비동기 방식을 구현한 방법을 알아볼 것입니다.

 

이를 위해서는 IEnumerator에 대해서 알아야 할 필요가 있습니다.

IEnumerator에 대해서 -> 링크

 

IEnumerator에 대해서 알고있다면, 어느 정도 감이 잡혔을 수도 있는데

Unity Coroutine에서 StartCoroutine이 실행하는 메서드는 IEnumerator를 반환합니다.

// 대충 클래스 내부
private void Start()
{
    StartCoroutine(DoTest);
}

IEnumerator DoTest()
{
    yield return null; 
    // 제어권을 옮기고 다음 LateUpdate부터 조건 체크, 조건이 Null이기에 다음 프레임에 다음 구문이 실행됨.
    
    yield return new WaitForSeconds(1.0f);
    // 제어권을 옮기고 다음 LateUpdate부터 조건 체크, 조건이 WaitForSeconds(1.0f)이기에 1초 후 다음 구문 실행
}

 

yield return 부분에서 제어권을 Unity 내부에 있는 DelayedCallManager에 반환합니다.

이후 다음 프레임부터 DelayedCallManager에서 LateUpdate 타이밍에 yield return에 있던 조건이 만족되었는지 확인 후  조건 만족 시 다음 구문을 실행합니다. 실행 중 yield return부분을 만나면 다시 DelayedCallManager에 제어권을 반환합니다.

 

이러한 방식으로 Unity Coroutine이 싱글 스레드에서 비동기 방식으로 굴러갑니다.