본문 바로가기
PROGRAMING📚/Unity📑

[유니티 Unity] 코루틴(Coroutine) 작성 & Return 종류 정리

Ta이니 2022. 6. 2.
728x90
반응형

 

유니티에서 특정 코드를 반복적으로 실행하기 위해서

Update문에 코드를 작성하여 반복적으로 불러오기 위해서 사용한다. 

코루틴도 Update와 마찬가지로

특정 코드를 반복적으로 실행하기 위해서 사용하는데

 

코루틴과 Update의 차이점은

Update에 작성된 코드는 매 프레임마다 계속 반복적으로 실행되어 효율적이지 않을 수 있다. 

그런 경우 코루틴을 사용해서 자신이 필요한 순간에만 반복하고

필요하지 않은 경우에는 멈출 수 있는 코루틴을 효과적으로 많이 사용한다.

 


 

코루틴을 사용하기 위해서는

IEnumerator 라는 반환형을 사용해 주어야하고 

마지막에는 yield return 반환 값을 작성해 주어야 합니다.

* yield return을 넣어주지 않으면 코드상에 에러가 발생하는 것을 확인 할 수있습니다. *

 

void Start()
{
	StartCoroutine(_Start());	//1. 코루틴 사용하기 
    //StartCoroutine("_Start");
    StopCoroutine(_Start()); //2. 코루틴 멈추기
    //StopCoroutine("_Start");
    StopAllCoroutines();// 3. 전체 코루틴 멈추기
}
IEnumerator _Start()
 {
   	yield return null; 
 }

StartCoroutine을 사용할 때 함수()형으로 작성해서 넣어도 사용이 가능하고

 " "를 사용해서 스트링 형식으로도 작성해서 사용이 가능합니다.

 

StopCoroutine을 사용하면 해당 코루틴 함수를 멈출수있고

StopAllCoroutine을 사용하면 모든 코루틴 함수를 종료합니다.

 


 

코루틴 반환 종류는 여러가지가 존재 합니다.

그중에서 가장 대표적으로 많이 사용되는 몇가지를 적어보자면

 

1. yield return null

IEnumerator _MyCoroutine()
{
	//코루틴을 사용해서 불러올 코드 작성
    yield return null;
}

 

2. yield return new WaitForEndOfFrame()

 

프로그램에서 한 프레임워크가 완전히 종료될때 호출됩니다.

모든 업데이트가 끝이나고 화면 렌더링 까지 끝났을 경우에

WaitForEndOfFrame() 구문의 밑의 부분이 실행됩니다.

IEnumerator _MyCoroutine()
{
	//젤 처음 나올 코드
    yield return new WaitForEndOfFrame();
	//한 프레임이 종료되고 호출
}

 

3. yield return new WaitForFixedUpdate()

 

FiexedUpdate()가 끝나면 그 다음 구문의 코드가 실행됩니다.

IEnumerator _MyCoroutine()
{
//...
    yield return new WaitForFixedUpdate();
//다음 프레임에 실행될 코드 작성
}

 

4. yield return new WaitForSeconds()

 

n초가 지나고 다음 코드가 실행되기를 원할 경우 사용합니다.

IEnumerator _MyCoroutine()
{
//... 1
    yield return new WaitForSeconds(1.5f);
//... 2
}

(1)번 코드가 실행 되고 1.5초가 지나고 나면 (2)번 코드가 실행 됩니다.

 

 

5. yield return new WaitForSecondsRealtime()

 

yield return new WaitForSeconds()와 같은 기능으로 괄호 안에 초가 지나고 나서 다음 구문이 실행 됩니다.

하지만 WaitForSecondsRealtime은 절대적 시간을 의미하기 때문에 Time.timeScale의 영향을 받지 않습니다.

IEnumerator _MyCoroutine()
{
//... 1
    yield return new WaitForSecondsRealtime(1.5f);
//... 2
}

 

6. yield return new WaitUntil()

 

괄호안에 조건식을 넣어주고 결과값이 True가 되면 그 다음 구문을 실행합니다.

IEnumerator _MyCoroutine()
{
	int num =5;
	while(num>0){
	num -=1;
	yield return null;
	}
    yield return new WaitUntile(()=>num<0);
}

저는  num이 0보다 작을 경우 다음으로 넘어갈 수 있도록 코드를 작성하였습니다.

예시는 예로만 봐주시면 감사하겠습니다 ㅎㅎ;

 

7.yied return new WaitWhile()

IEnumerator _MyCoroutine()
{
	int num =5;
    yield return new WaitWhile(()=>num<0);
	num = 0; 
}

WaitWhile()은 WaitUntil()과 다르게 괄호안에 조건을 충족하지 않을 경우(False)

다음 구문으로 넘어가서 실행을 합니다.

 

 

 

 

 

 

참고: https://yeobi27.tistory.com/entry/Unity-yield-return-%EC%A2%85%EB%A5%98

728x90
반응형

댓글