Unity - 코루틴

수냉·2025년 11월 11일

Unity

목록 보기
4/10

코루틴(Coroutine)이란

코루틴은 함수의 실행을 일정 시간동안 일시 중지 시키고 다른 코드 등을 실행시킨 후 다시 중지 된 시점에서 다시 시작되게 만드는 코드다.
코루틴은 일반 함수 반환인 return앞에 yield라는 키워드를 사용하며 yield 뒤에 시간을 지정해주는 코드를 작성하여 정지 시간을 설정해줄 수 있다.

코루틴 함수의 시간 종류

1. yield return null 
//한 프레임 뒤에 이어서 실행
//string같은 문자열이 뒤에 와도 null과 같은 취급
2. yield return new WaitForSecond(t) 
//t초 기다린 후 이어서 실행
3. yield return new WaitUntill(condition)
//조건이 참이 될 때 이어서 실행
4. yield return new WaitWhile(condition)
//조건이 거짓이 될 때 이어서 실행
5. yield break
//일반적인 함수의 return과 동일. 함수를 중단시킴

코루틴을 쓰는 이유와 주의점

코루틴을 잘 사용하면 함수를 일정 시간동안 반복해서 실행하거나 특정 상황일 때 함수를 사용하지 못하게 하는 등 코드를 유연하게 사용하게 해주나, 잘못 사용하면 원하지 않는 반복, 의도되지 않은 결과가 출력될 수 있다.

코루틴을 실행 시킨 후 반드시 중지시키거나 코루틴이 없을 때 실행되는 예외처리를 하여 메모리 누수를 방지하고
코루틴을 변수에 담아둬서 메모리 사용량을 절약하는 등 주의해서 사용한다면 매우 유용한 코드가 아닐수 없다.

IEnumerator

IEnumerator는 C#에서 제공하는 인터페이스 중 하나로 반복 가능한 객체를 순환하는 용도로 사용하며 코루틴이나 foreach에 주로 사용한다.

IEnumerator의 멤버

void Movenext() => 다음으로 넘어갈 수 있는지 아닌지를 판단. 넘어갈 수 있으면 true, 아니면 false를 반환
object Current{get;} => 현재상태를 object(뭐든지 담을 수 있는)형태로 기억
void Reset() => 반복하는 과정을 처음으로 되돌림 (코루틴에선 잘 사용되지 않음)

예제

void Start()
{
   StartCoroutine(Number());
   //코루틴을 시작하는 함수
}

private IEnumerator Number();
{
   for(int i = 0; i<5; i++)
   {
  	   Debug.Log(i);
       yield Return new WaitforSeconds(1f);
       //여기까지 실행 된 후 1초를 기다렸다가 다시 Number()함수를 실행한다
   }
}

Invoke

코루틴과 비슷하게 시간을 지연시켜주는 함수이며 코루틴에 비해 매우 간단한 코드로도 작동이 가능해 편리하다는 장점을 가지고 있다.

Invoke("사용할 함수 문자열", 2f)
//문자열에 있는 함수를 찾아 2초후에 실행

Invoke("사용할 함수 문자열", 1f, 2f)
//문자열에 있는 함수를 찾아 1초후 2초마다 실행

이렇듯 매우 간단하게 사용할 수 있으나 반복이외에는 사용할 수 없고 메서드 입력시 오타의 위험성이 있으며 코루틴에 비해 복잡한 로직에는 사용하기 어렵다는 단점이 존재한다.

0개의 댓글