기타/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로 전환하여 코루틴을 종료시키는 등 다양하게 활용할 수 있다.
반응형