기타/Unity

[유니티C#] Coroutine에 대하여

erin.yoon 2020. 7. 8. 19:38

# 코루틴(Coroutine) 이란?

유니티 매뉴얼에서는 코루틴을 이렇게 설명하고 있다.

코루틴은 실행을 중지하여 Unity에게 제어권을 돌려주고, 그러나 계속할 때는 다음 프레임에서 중지한 곳부터 실행을 계속할 수 있는 기능입니다. IEnumerator 형식을 반환값으로 가지며 yield return 구문을 어디엔가 포함하고 있는 함수입니다. yield return행은 실행을 중지하고 다음 프레임에서 실행을 재개할 수 있는 지점입니다. 코루틴을 실행하려면 StartCoroutine 함수를 사용합니다.

즉, 코루틴이란 어떤 작업을 처리할 때 필요에 따라 시간 간격을 두고 작업을 처리할 수 있도록 도와주는 함수이다.

유니티에서 코루틴은 매우 중요한 개념으로, 게임에 지속적인 변화를 주거나 게임의 진행 순간순간 체크(사용자의 입력 등)가 필요한 경우 등 다양한 상황에서 사용한다.

 

이전 글에서 Time.deltaTime의 필요성에 대해 쓰면서 컴퓨터의 성능에 따라 다른 결과값이 나올 수 있다는 말을 한 적이 있는데, Update()나 FixedUpdate()함수에서 특정 행동을 특정 시간(e.x. 5초)동안 취해야 할 경우 오차가 발생하여 제어하기 힘들다. 따라서 이럴 경우 유니티에서는 Coroutine을 이용한다.

 

 

 

# 사용법

  • StartCoroutine : 코루틴 호출
void 함수명() {
	StartCoroutine(코루틴 함수명());
}

 

  • IEnumerator : 코루틴 함수 구현
public IEnumerator 코루틴함수명() {
    yield return new WaitForFixedUpdate();
}

여기서 yield라는 것은 반복자의 IEnumerator 객체에 값을 전달하거나, 반복의 종료를 알리기 위해 사용된다.

yield return null 다음 프레임까지 대기
yield return new WaitForSeconds(float) 지정된 초(float)만큼 대기
yield return new WaitForFixedUpdate() 다음 물리 프레임까지 대기
yield return new WaitForEndOfFrame() 모든 렌더링작업이 끝날 때까지 대기
yield return StartCoRoutine(string) 다른 코루틴이 끝날 때까지 대기
yield return new WWW(string) 웹 통신 작업이 끝날 때까지 대기
yield return new AsyncOperation 비동기 작업이 끝날 때까지 대기

 

여기서 WaitForSeconds()로 일정 시간 간격으로 처리하는 경우 while(true) 등의 무한루프를 걸어 사용할 수도 있고, 특정 조건을 만족하는 동안이면 bool 변수를 위치시켜 true->false로 전환하여 코루틴을 종료시키는 등 다양하게 활용할 수 있다.

 

 


출처  https://docs.unity3d.com/kr/530/Manual/Coroutines.html

반응형