Unity 내일배움캠프 TIL 1121 | Unity의 코루틴(Coroutine)

cheeseonrose·2023년 11월 22일
0

Unity 내일배움캠프

목록 보기
83/89
post-thumbnail

💡 코루틴(Coroutine)



🍸 정의

  • 대부분의 메서드는 단일 프레임 업데이트 내에서 모든 수행이 발생한다.
  • 코루틴을 사용하면 실행을 일시 정지하고 제어를 Unity에 반환하지만, 중단한 부분에서 다음 프레임에 계속 수행할 수 있다.



🍷 코루틴의 매개 변수

StartCoroutine(메서드이름(매개변수1, 매개변수2));
StartCoroutine("메서드이름", 매개변수);
  • 코루틴은 매개 변수를 전달할 수 있다는 장점이 있다.
  • 두 번째 방법의 경우 매개변수를 1개만 전달할 수 있다.
  • 성능 면에서 첫 번째 방법이 더 좋다.



🍺 yield return

  • 코루틴의 중단 지점은 yield return null 라인이며, 이때 WaitForSeconds 같은 기능을 사용해 시간을 지연시킬 수 있다.
종류기능
yield return null다음 프레임에 실행
yield return new WaitForSeconds(float)매개변수로 입력한 숫자에 해당하는 초만큼 기다렸다가 실행
유니티 상에서의 시간 기준
Time.timeScale에 영향 받을 수 있음
yield return new WaitForSecondsRealtime(float)매개변수로 입력한 숫자에 해당하는 초만큼 기다렸다가 실행
현실의 시간 기준
Time.timeScale에 영향 X
yield break코루틴을 끝내는 코드



🥃 Coroutine vs Update vs Invoke

  • Update 함수 내에서 매 프레임 호출하며 작업을 반복할 필요가 없는 경우, 코루틴을 사용해 정기적으로 업데이트를 할 수 있다.
  • 코루틴은 일반 메서드처럼 매개변수를 넘길 수 있다는 장점이 있어서 Invoke 대신 사용할 수 있다.
    또한 성능 면에서도 Invoke보다 Coroutine이 더 좋다.



🍶 Unity와 Coroutine

  • C# 컴파일러는 코루틴을 지원하는 클래스 인스턴스를 자동으로 생성한다.
  • Unity는 이 오브젝트를 사용하여 단일 메서드를 여러 번 호출하는 동안 코루틴의 상태를 추적한다.
    → 코루틴에서 로컬 범위 변수가 yield 호출이 진행되는 동안 유지되어야 하므로, Unity는 로컬 범위 변수를 생성된 클래스로 옮긴다.
    코루틴이 작동되는 동안 힙에 할당된 상태
  • 이 오브젝트는 코루틴의 내부 상태를 추적하여, yield 호출 이후 코루틴이 코드의 어느 부분부터 다시 시작해야 하는 지를 기억한다.



출처 - Unity Documentation 코루틴
출처 - [유니티] 코루틴의 사용법 총정리 - Unity Coroutine
출처 - 유니티 기본기 : 코루틴(Coroutine)



끗 !!!

0개의 댓글