[ Unity ] Coroutine

Minsu._.Lighting·2024년 6월 13일
0

📚 [ Unity / Unreal ]

목록 보기
1/4

💡 Coroutine?

  • Unity에서 제공하는 기능

  • 코드 내에서 구문 실행 도중에 처리를 대기시키거나 순차 처리에 함수를 병렬로 동시에 처리하도록 구현하는 기능
    - 쉽게 말해 내가 필요한 순간에만 반복하고 필요하지 않은 순간에는 사용을 하지 않을 수 있다



💡 Coroutine의 필요성?

  • 시간이 지남에 따라 점진적으로 결과를 보여주고자 할 때

  • 어느 시점으로부터 일정 시간 이후 작업을 진행하고자 할 때

  • 프레임마다 호출이 아닌, 일정 시간마다 호출하여 연산의 수를 줄이고자 할 때

  • 너무 무거운 작업을 Update에서 진행할 시의 오버헤드를 방지하고자 할 때



💡 Coroutine 사용 방법!

📌 Coroutine의 필수 조건

  • Coroutine은 IEnumerator를 반환해야 한다
    - IEnumerator : StartCoroutine()함수의 매개변수, C#의 iterator

  • yield return이 반드시 함수 내부에 존재해야 한다
    - yield return의 반환 값에 따라 일시 정지, 재개에 대한 기준이 마련 된다.

    - yield break로 진행중인 코루틴을 중단할 수 있다.

📌 Coroutine 실행 방법

  • 매개변수로 함수 형태로 전달
    - 성능이 더 뛰어나지만 제어권을 얻을 수 없다

  • 매개변수로 함수의 이름을 전달
    - 해당 코루틴의 중지를 제어 할 수 있다.

📌 Coroutine 정지 방법

  • 매개변수로 함수의 이름을 전달
    - 해당 이름의 코루틴을 중지.

  • StopAllCoroutines() 함수 이용
    - 해당 스크립트에서의 모든 코루틴을 중지.



💡 Coroutine 사용 예시!

📌 실행 후 2초가 지난 시점부터 1초 간격으로 "Coroutine!" 로그를 3번 만 띄워보자!

[ update 이용시 ]

- 매프레임 마다 시간을 중첩시켜 연산
- 2초가 지나는 시점 1초 간격을 위한 연산
- 로그가 3번 띄워져야 하기 때문에 실행 후 2초, 3초, 4초에 1번씩 "Coroutine" 로그를 띄우고
- 4초가 지난 후 부터는 로그를 띄우지 않게 예외처리를 해준다
- 하지만 update이기 때문에 매 프레임 불필요한 연산을 반복함

[ Coroutine 이용시 ]

- 내가 원하는 시점(실행 후 2초가 지난 시점)에 Coroutine 실행
- Coroutine 내부에서 루프문을 통해 1초 간격으로 3번만 "Coroutine" 로그를 띄움
- 3번의 루프를 빠져나오면 Coroutine 종료
- Coroutine이 종료되어 더이상의 불필요한 연산을 할 필요가 없음

profile
오코완~😤😤

0개의 댓글