멍멍이네 블로그

코루틴(Coroutine)이 뭔가요?

C 언어등에서 일반적으로 사용하는 함수는 시작할 때 진입하는 지점이 하나 존재하고 함수가 모두 실행되거나, return 구문에 의해서 종료되는 지점을 설정할 수 있습니다. 이러한 함수를 서브루틴(Subroutine)이라 부르는데, 코루틴은 이를 더 일반화한 개념으로 진입하는 지점까지 여러 개를 가질 수 있는 함수를 의미합니다. 개념적으로만 본다면 서브루틴도 코루틴의 한 종류라고 볼 수 있겠지요.

 

Coroutine 선언

IEnumerator 함수이름(){

}

void Start(){

  StartCoroutine("함수이름");

  //StartCoroutine(함수이름());

}


 

코루틴용 데이터

엔진이 수행하는 기능

yield return null

다음 프레임까지 대기

yield return new WaitForSeconds(float)

지정된 초 만큼 대기

yield return new WaitForFixedUpdate()

다음 물리 프레임까지 대기

yield return new WaitForEndOfFrame()

모든 렌더링작업이 끝날 때까지 대기

yield return StartCoRoutine(string)

다른 코루틴이 끝날 때까지 대기

yield return new WWW(string)

웹 통신 작업이 끝날 때까지 대기

yield return new AsyncOperation

비동기 작업이 끝날 때까지 대기 ( 씬로딩 )

 

일반 메소드처럼 사용 할 수 있지만, Update()와 적절히 섞어서 쓰면 프로그램 성능을 높일 수 있다.

void Update(){

  time += Time.deltaTime;

  if(time > 3)

    // 할일

}

// 성능에 따라서 3초간 수십번을 호출을 하고 if문에서 체크를 한다.

 

void Start(){

  StartCoroutine("TimeCheck");

}

IEnumerator TimeCheck(){

  yield return new WaitForSeconds(3f);

  //할일

}

// 1번 호출 후 yield return new WaitForSeconds(3f);에 의해 3초간 대기 후 할일을 한다.

 

내가 생각하는 주로 하는 역활

Update() : 지속적이며 불규칙한 호출이 필요한 경우

Coroutine() : 일정 규칙적으로 호출이 필요한 경우

 

Tip.

StartCoroutine의 사용방법은

1. StartCoroutine( " MethodName " );

2. StartCoroutine( MethodName() );

이 있는데, 1번과 같이 사용할 경우 다른 위치에서 StopCoroutine( " MethodName " ); 으로 Stop이 가능함.

 

참조 사이트 : http://www.unitystudy.net/bbs/board.php?bo_table=writings&wr_id=43