Unity - Coroutine2

2024. 4. 22. 19:32Unity/Unity 학습정리

저번 포스팅에 이어서 이번에는 코루틴의 특징과 원리에 대해서 공부해 보았다.

 

목차

  1. 코루틴의 특징
  2. 코루틴의 원리
  3. WaitForSeconds()
  4. 마무리

     

     


    코루틴의 특징

    • 반드시 IEnuemrator를 반환해야 한다.
    • MonoBehaviour를 상속받는 객체여야한다.
    • 코루틴을 다루는 함수들은 모두 Monobehaviour 클래스안에 작성되어야 한다.
    • 코루틴은 소유권의 개념이 있고, 소유권을 가진 객체가 비활성화되거나 파괴되면 해당 객체가 소유한 모든 코루틴은 중단된다.
    • 코루틴은 메인 스레드에서 실행된다.

    여기서 IEnuemartor를 반환해야하는데 코드를 보면 yield return 을 한다. 이것은 C#의 반복기이며 반환 형식은 IEnuemrator<T>로 반환을 하는것입니다.

     

     

     


     

    코루틴의 원리

    • 코루틴은 다른 스크립트 코드와 다르게 실행된다.
    • 코루틴의 CPU 코드는 항상 트레이스의 두 곳에서 나타난다.
    • 이는 유니티에서 코루틴을 호출하는 방식 때문인데 yield return 을 만나기전까진 일반적인 함수처럼 실행되다가 yield return 을 만나면 유니티 메인 루프에 있는 DelayedCallManger에 등록이 된다.
    • 이후부터는 DelayedCallManager가 yield 조건에 만족될때 마다 다시 오브젝트를 호출한다.

    https://docs.unity3d.com/kr/2021.3/Manual/Coroutines.html

     

    코루틴 - Unity 매뉴얼

    코루틴을 사용하면 작업을 다수의 프레임에 분산할 수 있습니다. Unity에서 코루틴은 실행을 일시 정지하고 제어를 Unity에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드입니

    docs.unity3d.com


     

    WaitForSeconds(float time)

    해당 함수의 매개변수로 't'를 넘겼다면, 정확히 t초가 아니라 't'초가 지난후 그 다음 프레임에 실행되기 때문에 정확하게 't'초가 아니다. 사람이 느끼기에는 거의 동일하다고 느끼겠지만.

     


     

    마무리

      특징과 원리를 블로그랑 Unity Document를 참고하여 작성해보았는데, 코루틴의 특징 같은 경우에는 코드를 구현하면서 반드시 알아야지 에러나 버그를 미연에 방지할 수 있다고 생각된다.

      코루틴의 원리부분에서는 Update()처럼 프레임마다 실행시켜주는 것이 아니라 yield return에 따라 유니티의  DelayedCallManger 에서 관리하고 추적해 함수를 호출한다는 것을 알게되었다

     

     

     

    'Unity > Unity 학습정리' 카테고리의 다른 글

    Unity - 각도 구하기  (0) 2024.05.16
    Unity - LayerMask  (0) 2024.05.09
    Unity - Coroutine  (1) 2024.04.19
    Unity Animation  (1) 2024.04.18
    #1 중복 없이 숫자를 뽑아 배열에 저장  (0) 2024.04.15