CH.개인기록 노트

Unity

Unity 코루틴(Coroutine)

amckdgjs 2024. 4. 1. 17:30

대부분의 경우 메서드를 호출하면 실행을 완료한 뒤 호출한 메서드에 제어와 선택적 반환값을 리턴해야 한다.

즉, 메서드 내에서 발생한 모든 행동은 단일 프레임 업데이트 내에서 발생해야 한다.

->코루틴을 사용하면 작업을 다수의 프레임에 분산할 수 있다.

유니티에서 코루틴은 실행을 일시 정지하고 제어를 유니티에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드이다.

IEnumerator Routine()
{
    Debug.Log(0);
    yield return new WaitForSeconds(1f);
    Debug.Log(1);
    yield return new WaitForSeconds(1f);
    Debug.Log(2);
    yield return new WaitForSeconds(1f);
    Debug.Log(3);
    yield return new WaitForSeconds(1f);
    Debug.Log(4);
    yield return new WaitForSeconds(1f);
    Debug.Log(5);
}
//코루틴 변수
//코루틴을 관리하는 객체를 참조하는 변수
Coroutine coroutine;


private void OnEnable()
{
    coroutine = StartCoroutine(Routine());
}
private void OnDisable()
{
    StopCoroutine(coroutine);
    StopAllCoroutines();
}
IEnumerator CoroutineWait()
{
    yield return null; //한 프레임 지연
    yield return new WaitForSeconds(1f);//n초간 시간을 지연
    yield return new WaitForSecondsRealtime(1f);//현실 n초간 시간 지연
    yield return new WaitForFixedUpdate(); //FixedUpdate 까지 지연
    yield return new WaitForEndOfFrame();//프레임의 끝까지 지연
    yield return new WaitUntil(() => true); //조건이 충족될때까지 지연
}

1초 후에 출력하는 결과를 볼 수 있다.

어디에 쓰는지?

예를 들면 특정 시간이 지난 후에 효과를 적용하거나, 복잡한 애니메이션을 관리하거나, 대기시간을 처리할 때 사용할 수 있다.반복적이고 지연된 작업을 처리할 때 유용하다.

하지만 남발하면 성능 문제가 일어날 수 있기 때문에 적재적소에 사용해보자.

'Unity' 카테고리의 다른 글

Unity 커맨드 스킬 구현  (0) 2024.04.25
Unity 2D 프로젝트(2주)  (0) 2024.04.25
Unity 게임 오브젝트  (0) 2024.04.01