[Unity] 코루틴 이해1

Unity 2023. 6. 23. 13:19
728x90

 

일반적인 코루틴은 Update 함수가 반환된 후 실행된다

코루틴은 주어진 YieldInstruction(이하 yield)이 완료될 때 까지 실행을 중단(양보)할 수 있는 함수이다

  • yield 코루틴은 모든 Update 함수가 다음 프레임에 호출된 후 계속된다
  • yield WaitForSeconds 지정한 시간이 지난 후, 모든 Update 함수가 프레임에 호출된 후 계속된다
  • yield WaitForFixedUpdate 모든 FixedUpdate가 모든 스크립트에 호출된 후 계속된다 FixedUpdate 전에 코루틴이 양보하면 현재 프레임의 FixedUpdate 이후에 재개한다
  • yield WWW WWW다운로드가 완료된 후 계속된다
  • yield StartCoroutine 코루틴을 연결하고 현재 코루틴이 먼저 완료되기를 기다린다

 

코루틴이 반복 되지 않는 예 (예시는 카운트다운)

최초실행시 Update() 호출

 

코루틴 호출

 

Update() 호출

 

시간이 지났음에도 여전히 코루틴은 실행되지 않고 Update()는 계속 호출되고있다

결과적으로 CountSec의 코루틴은 한번 실행완료 후 종료되었다

 

코루틴을 수정한다

 

호출

시간이 지나고 Update() 이후 재 호출되었다

의도대로 작동되는 것을 확인했다

반복자 while은 종료되기 전까지 실행마다 MoveNext()를 생성한다

yield가 있는 명령문을 실행할때 마다 코루틴은 값(null, WaitForSeconds 인스턴스 등) 호출을 완료하고 MoveNext()를 생성한다 

반복문안의 yield는 함수에 종속적이지 않고 별도의 스레드처럼 동작한다

 

리팩토링

코루틴을 Update()처럼 사용하겠다

반복문을 벗어나면 코루틴을 완료한 것으로 StopCoroutine 필요없이 종료된다.

코드도 간결해지고 결과도 의도대로 잘 나왔다.

 

념념굿

 

 

 
728x90
Posted by 바르마스
,