[Unity] Coroutine

Updated:

  • Unity는 single thread만 지원하면서, multi thread 흉내를 내고 싶었음 (multi thread에서 신경써야할 다양한 문제 배제)
  • Coroutine 함수가 IEnumerator를 반환하는 방식으로 구현
  • yield return 사용, 그 위치를 기억하고, 값 반환 후 다음 작업 실행
  • update 함수는 1 frame에 한 번 호출, yield로 진입점을 다양하게 하여 순차적으로 프로세스 처리

Example

void Fade() 
{
    for (float ft = 1f; ft >= 0; ft -= 0.1f) 
    {
        Color c = renderer.material.color;
        c.a = ft;
        renderer.material.color = c;
    }
}
  • 점차 색이 바래는 효과를 위한 함수이지만, 한 프레임에 모두 작업이 완료
  • 이런 종류의 작업에 coroutine 사용
void Update()
{
    if (Input.GetKeyDown("f")) 
    {
        StartCoroutine("Fade");
    }
}

IEnumerator Fade() 
{
    for (float ft = 1f; ft >= 0; ft -= 0.1f) 
    {
        Color c = renderer.material.color;
        c.a = ft;
        renderer.material.color = c;
        yield return new WaitForSeconds(.1f);
    }
}
  • 기본적으로 coroutine은 프레임 생성 후 다시 시작
  • WaitForSeconds를 사용해 시간 지연 도입

ref
Coroutine(Unity Doc)
코루틴의 이해
Coroutine(코루틴)과 Update

Categories:

Updated:

Leave a comment