오늘은 코루틴에 대해 알아보도록 하겠습니다!
코루틴은 어떤 상황에 사용할까?
보통 코루틴은 특정 행동을 지연시킬 때 사용하게 되는데, 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에서 호출하도록 하겠습니다.



코드가 좀 더 깔끔해진 느낌이죠?
실행해보면..
정상적으로 실행하는 것을 볼 수 있습니다.
이상으로 글을 마치도록 하겠습니다.
부족한 점이나 궁금한 점 있으시면 편하게 댓글 달아주세요!
빠르게 답장해드리도록 하겠습니ㄷㅏ!!
'ㄱㅔ임 ㄱㅐ발' 카테고리의 다른 글
무적 기능을 구현해보ㅈㅏ!(코루틴) (0) | 2022.10.14 |
---|---|
(유니티) 싱글톤 패턴에 대해 알아보ㅈㅏ! (0) | 2022.10.08 |
똥 피하기 게임을 만들어보ㅈㅏ!(3. Instantiate를 사용하여 똥을 만들기, 게임 빌드하기) (0) | 2022.10.05 |
똥 피하기 게임을 만들어보ㅈㅏ!(2. 플레이어와 똥 오브젝트 만들기, Rigidbody와 Collider 이해하기) (0) | 2022.10.04 |
똥 피하기 게임을 만들어보ㅈㅏ!(1. 타이틀씬 만들기) (2) | 2022.10.03 |