본문으로 건너뛰기

Coroutine 알아보기

· 약 3분

Unity 게임 개발에서 Coroutine(코루틴)은 주요한 개념 중 하나입니다. 이 문서에서는 Unity에서의 Coroutine의 기초부터 심화 내용까지 자세히 살펴보겠습니다. 코루틴은 게임의 성능 향상, 애니메이션 제어, 시간 기반 작업, 백그라운드 작업 등 다양한 상황에서 사용될 수 있습니다.

소개

Coroutine은 Unity의 MonoBehaviour 클래스에서 사용되며, 게임 로직을 비동기적으로 처리할 때 특히 유용합니다. Coroutine은 Update() 함수와는 독립적으로 실행되며, 주로 시간 기반 작업에 적합합니다.

Coroutine Flow

Coroutine과 Thread

.NET(닷넷)은 Multi-thread를 지원하지만, .NET을 사용하는 유니티는 Single-thread로 동작합니다. Single-thread 환경에서 동시에 여러 동작을 하기 위해(멀티쓰레드를 흉내내기 위해), Unity에서는 Coroutine을 사용해야합니다.

기본적인 사용법

Coroutine 내에서는 yield return 문을 사용하여 양보하고 기다릴 수 있습니다.

가장 일반적인 사용 사례 중 하나는 yield return new WaitForSeconds(time)를 사용하여 대기 시간을 지정하는 것입니다.

IEnumerator Example() {
Debug.Log("Start Coroutine");
yield return new WaitForSeconds(2.0f); // 2초 대기
Debug.Log("Coroutine Resumed after 2 seconds");
}

Coroutine 시작 (StartCoroutine)

Unity에서 Coroutine을 시작하는 방법은 다음과 같습니다.

void Start() {
StartCoroutine(MyCoroutine());
}

IEnumerator MyCoroutine() {
// 코루틴 내용
yield return null;
}

Coroutine 중단 (StopCoroutine)

Coroutine을 중단하는 방법에는 세 가지가 있습니다.

  1. StopCoroutine(IEnumerator routine): 특정 Coroutine을 중단합니다.
void StopExample() {
StopCoroutine(MyCoroutine());
}
  1. StopCoroutine(string methodName): Coroutine 함수 이름을 사용하여 중단합니다.
void StopExample() {
StopCoroutine("MyCoroutine");
}
  1. StopAllCoroutines(): 현재 클래스에서 실행 중인 모든 Coroutine을 중단합니다.
void StopAllExample() {
StopAllCoroutines();
}

Coroutine 중첩 (Nested Coroutine)

Coroutine 내에서 다른 Coroutine을 시작할 수 있습니다. 이렇게 하면 작업을 조직화하고 의존성을 처리할 수 있습니다.

IEnumerator TestRoutine() {
Debug.Log("Start TestRoutine");
yield return StartCoroutine(OtherRoutine());
Debug.Log("Finish TestRoutine");
}

IEnumerator OtherRoutine() {
Debug.Log("Start OtherRoutine #1");
yield return new WaitForSeconds(1.0f);
Debug.Log("Start OtherRoutine #2");
yield return new WaitForSeconds(1.0f);
Debug.Log("Start OtherRoutine #3");
yield return new WaitForSec'onds(1.0f);
Debug.Log("Finish OtherRoutine");
}

요약 및 팁

  1. Coroutine은 Unity MonoBehaivour의 LifeCycle과 별개로 멀티쓰레드를 흉내내기 위해 사용하는 IEnumerator를 반환하는 함수입니다.
  2. Coroutine은 StartCoroutine을 호출하는 MonoBehaviour에 종속되어있어 해당 MonoBehaviour 비활성화시 같이 비활성화됩니다.

마무리

Unity에서의 Coroutine은 게임 개발에서 매우 유용한 도구 중 하나입니다. 이 글에서는 Coroutine의 기초를 다루었으며, Unity 프로젝트에서 활용할 수 있는 다양한 방법을 살펴보았습니다. 코루틴을 사용하여 게임의 성능을 최적화하고, 다양한 작업을 비동기적으로 처리할 수 있습니다.

참고 자료