스파르타 게임개발종합반(Unity)/TIL - 본캠프 매일 공부 기록

2024.06.18 TIL - 코루틴(Coroutine)

테크러너 2024. 6. 18.

코루틴(Coroutine)

코루틴은 하나의 작업을 여러 개의 프레임에 분산할 때 사용한다.

예를 들어, 투명하게 만들고 싶은 게임오브젝트에 대한 메소드가 있다고 생각해보자.

void Fade()
{
    Color c = spriteRenderer.color;
    for (float alpha = 1f; alpha >= 0; alpha -= 0.1f)
    {
        c.a = alpha;
        spriteRenderer.color = c;
    }
}

void Start(){
		Fade();
}

위와 같이 작성할 경우 결국 알파가 0일 때만 나타나게 된다.

하지만 알파가 0.9, 0.8, 0.7… 순차적으로 내려가게 하고 싶었던 프로그래머의 순수한 의도를 우리는 볼 수 있을 것이다.

코루틴은 유니티에서 비동기적인 작업을 수행할 수 있게 해준다.

코루틴은 함수의 실행을 일시 중지하고, 이후에 다시 재개할 수 있는 기능을 제공한다.

위의 그림은 코루틴의 대강의 흐름이라고 생각하면 된다.

예를 들어, 아래의 코드는 1초마다 "Hello, World!"를 출력하는 간단한 코루틴을 보여준다.

using UnityEngine;
using System.Collections;

public class CoroutineExample : MonoBehaviour
{
    IEnumerator Start()
    {
        while (true)
        {
            Debug.Log("Hello, World!");
            yield return new WaitForSeconds(1f);
        }
    }
}

위의 코드에서 yield return new WaitForSeconds(1f); 부분은 코루틴을 1초 동안 중지시키는 역할을 한다.

이렇게 함으로써 코루틴은 지정된 시간 간격으로 반복적인 작업을 수행할 수 있다.

코루틴은 복잡한 비동기 작업, 예를 들어 네트워크 통신이나 애니메이션 재생과 같은 작업에 유용하게 사용될 수 있다.

코루틴을 통해 코드의 가독성과 유지보수성을 향상시킬 수 있다.

 

코루틴의 활용

`IEnumerator` 리턴 타입의 함수에서 `yield return`을 사용하여 코루틴을 구현할 수 있다.

`StartCoroutine` 함수를 통해 코루틴을 시작할 수 있고, `StopCoroutine` 함수를 통해 코루틴을 중지할 수 있다.

코루틴은 프레임 간의 지연, 비동기 작업, 시간에 따른 애니메이션 등의 작업에 주로 사용된다.

`yield return null`은 다음 프레임까지 대기를 의미하고, **yield return new WaitForSeconds(n)**은 n초 동안 대기를 의미한다.

코루틴은 별도의 스레드에서 실행되지 않는다. 따라서 Unity의 메인 스레드에서 안전하게 Unity API를 호출할 수 있다.

코루틴은 일반 함수와는 다르게, 실행을 일시 중단하고 나중에 다시 시작할 수 있어, 시간 지연, 반복, 조건부 대기 등의 작업을 수행할 때 매우 유용하다.

 

yield return으로 구현 가능한 예시

  • `yield return new WaitForSeconds(float)` : 입력한 초(sec) 만큼 대기
  • `yield return WaitUntil(조건)` : 조건을 만족할 때까지 대기
  • `yield return new www(string)` : 입력한 웹 통신 작업이 끝날 때까지 대기
  • `yield return startCoroutine(string)` : 입력한 다른 코루틴이 끝날 때까지 대기
  • `yield return new WaitFixedUpdate()` : 다음 프레임의 FixedUpdate까지 대기
반응형

댓글