[unity] 유니티 초보자용 코루틴 개념, 사용 예시

2022. 6. 27. 03:34유니티 코딩 기본 개념

본 포스팅에서는 이해를 위한 오류가 포함되어 있습니다.

 

유니티 초보자가 코루틴( coroutine )을 처음 들어보면 도대체 뭔가 싶고 어려워 보이는 이름에 겁을 먹을 수 있다.
하지만 코루틴은 코딩을 더욱 쉽게 만들고 효율적인 코드를 작성할 수 있게 해주기에 꼭 알고 있으면 좋을 것 같다.

 

1. 코루틴 개념

 

우선 코루틴을 간단하게 말하자면 함수 실행 중간 중간에 딜레이를 줄수 있는 함수 같은 것이다. ( 완전히 틀린 말이지만 일단은 이렇게 알아두자 )

 

 

만약에 우리가 숫자를 카운트 다운하는 함수를 만든다고 해보자

이런식으로 함수를 만들수 있을것이다.

매개변수로 받은 값부터 1까지 콘솔 창에 띄우는 함수이다.

그런데 만약 이 숫자들을 1초 간격으로 출력하고 싶다면 어떻게 해야 할까
Invoke를 쓰거나 하는 방법도 있지만 이럴 때는 코루틴을 쓰는 것이 제일 간단하다.

이 함수를 숫자를 1초 단위로 출력하게 코루틴으로 바꾸어 써보겠다.

CountDownCoroutine 이라는 이름의 함수

뭔가 많이 바뀌어 졌지만 겁먹을 것 없다.

 

yield return new waitforseconds(1);

 부분부터 설명하겠다.

코루틴은 함수를 실행하는 도중에 딜레이를 줄 수 있는데
그 종류는 초 단위, 한 프레임 동안, 특정 조건이 만족될 때까지, fixedupdate 주기만큼 등등 여러 방식이 있다.

 

yield return new WaitForSeconds(1); //초 단위 ( 1초 )

yield return null;                  //한 프레임 동안

yield return new WaitUntil(() => 조건); //조건이 true가 될때까지

yield return new WaitForFixedUpdate(); //FixedUpdate 주기만큼

 

각각 이런 식으로 사용한다.

앞에 공통적으로 붙는 Yield return은 일단 그냥 쓴다고 생각하자.

이제 아까의 코드를 다시 보면 for 문에서 i 값을 출력할 때마다 1초씩 쉬게 되어있다는 것을 알 수 있다.

 

 

또한 함수 이름 앞에 붙은 IEnumerator는 yield return ~~~ 를 사용하기 위해 함수앞에 붙이는 키워드이다. ( IEnumerator를 안쓰고 yield return ~~~ 를 사용하면 오류난다. )

 

 

코루틴을 실행하는 부분

또한 코루틴은 실행할때 StartCoroutine( 함수이름() );

이런식으로 써야 한다.

 

지금은 1초 간격으로 카운트다운을 하는 함수지만 게임의 보스가 1초 간격으로 총을 쏜다던가 하는 식으로 사용할 수 있을 거다.