본문 바로가기

ㄱㅔ임 ㄱㅐ발

코루틴에 대해 알아보ㅈㅏ!

오늘은 코루틴에 대해 알아보도록 하겠습니다!

 

코루틴은 어떤 상황에 사용할까?

보통 코루틴은 특정 행동을 지연시킬 때 사용하게 되는데, Update에서 시간을 지연시키는 행동을 하게 되면 

currentTime = Time.deltaTime

이라는 코드를 매 프레임마다 실행시켜줘야해서 비효율적인 코드가 됩니다.

이러한 상황속에서 코드의 비효율적인 부분을 고칠 수 있는 게 코루틴입니다.

 

코루틴은 어떻게 선언할까?

코루틴을 선언할 때는 앞에 IEnumerator를 붙여줘야 합니다.

IEnumerator TimeCheckCoroutine()
{
	//cooooode
    yield return new WaitForSeconds(3f);
}

이후 코루틴 함수 내에 제어권을 돌려주는 yield return을 적어줘야 하죠.

 

yield return의 종류

무작정 yield return만 넣고 코드를 실행하면 오류가 나게 됩니다.

이후 시간이나 어떤 상황까지 대기할 건지를 지시해야 하죠.

종류 설명
yield return null 다음 프레임까지만 대기합니다.(1프레임)
yield return new WWW(string) 웹 통신 작업이 끝날때까지 대기합니다.
yield return new WaitForSeconds(float) 지정한 시간까지만 대기합니다.
yield return WaitForFixedUpdate() 다음 물리 프레임까지만 대기합니다.
yield return new WaitForEndOfFrame() 모든 렌더링 작업이 끝날 때까지만 대기합니다.
yield return StartCoRoutine(string) 다른 코루틴이 끝날 때까지 대기합니다.
yield return new AsyncOperation 비동기 작업이 끝날 때까지 대기합니다.

 

코루틴 예시

이번엔 제가 저번에 올렸던 똥 피하기 프로젝트의 Factory스크립트로 예를 들어보겠습니다.

이 코드는 Update 안에서 일정 시간마다 똑같은 행동을 합니다.

이제 코드를 코루틴으로 바꿔보죠.

코루틴을 실행시키기 위해 start에서 호출하도록 하겠습니다.

위에 있는 두 방법 다 사용 가능합니다.
이 코드에서
이런식으로 바뀌었습니다!

코드가 좀 더 깔끔해진 느낌이죠?

실행해보면..

 

정상적으로 실행하는 것을 볼 수 있습니다.

 

이상으로 글을 마치도록 하겠습니다.

부족한 점이나 궁금한 점 있으시면 편하게 댓글 달아주세요!

빠르게 답장해드리도록 하겠습니ㄷㅏ!!