유니티 공부

코루틴 (Coroutine)

ogh4554 2024. 11. 13. 22:40

1. 사용처

 - Update가 아닌 곳에서도 반복적으로 코드가 실행되어야 할 때가 있다. (ex.OnEnable, 이벤트 호출시 등등)

> 그러한 상황에서 코루틴은 매우 효과적인 방법일 것이다.

 - 그밖에도 일정시간 텀을 두고 실행해야 하거나 특정 조건을 부여한 뒤 코드가 실행되게 해야 할 경우 등 다양한 방면에서 자주 사용된다. (실무에서도 굉장히 많이 사용된다고 하니 자세히 공부해보자)

+ 필자는 저번 협업 프로젝트에서 코루틴을 너무 많이 사용해서 현업자들에게 많이 혼날거같다는 얘기도 들었다...


2. 코루틴 사용방법

1) 필수 요소

 - IEnumerator라는 반환형으로 시작해야 한다.

 - yield return이 반드시 포함되어야 한다.

 

2) yield return의 종류

(1) yield return null;

=> 다음 프레임에 실행 됨

 

(2) yield return new WaitForSeconds( float );

=> float 초 만큼 기다렸다가 다음 줄의 코드 실행 

 

(3) yield break;

=> 코루틴을 끝내는 코드

 

(4) yield return new WaitForFixedUpdate/WaitForEndOfFrame; 등등.. 

 

3) 예시 (똥예시 주의)

피격 시 깜빡거리도록 하는 코루틴( 미개해서 이렇게 짠 점 죄송합니다 )

 - 위 코드는 필자가 실제로 사용했던 코루틴인데, 피격 당했을 시 해당 코루틴을 호출하여 _clikerTime의 시간 텀을 두면서 SpriteRenderer의 투명도를 낮췄다 올리기를 반복했었다.

 - 모든 루틴이 끝나면 yield break를 통해 코루틴을 끝냈다.

 


3. 코루틴의 장단점

1) 장점

 : 유니티는 한 번에 하나의 작업만 처리하는 단일 스레드 방식을 사용하는데 Update와 함께 yield를 사용하여 루틴을 번갈아 가면서 실행한다.

이를 통해 동시에 작업을 처리하는 것과 마찬가지로 작업을 실행시킬 수 있으며 이 작업의 반환 시점, 종료 시점, 대기 시점 등을 사용자가 조절 할 수 있다는 점이 큰 장점이라고 생각한다.

 

2) 단점

 (1) 오브젝트가 비활성화되면 코루틴이 정지된다

+ 단, 오브젝트는 활성화 되어 있고 스크립트만 비활성화 되어 있으면 코루틴은 유지된다.(띠용)

 

 (2) Garbage를 많이 생성한다.

 - 코루틴 시작을 위한 StartCoroutine()메서드는 이 코루틴을 관리하기 위해 인스턴스가 생성된다.

 - yield return new Waitfor ~... 처럼 new를 통해 인스턴스를 생성하게 되는데 이부분에서 가비지를 생성하게 된다.

더보기

=> 반복적으로 사용해야 할 경우에 코루틴 시작부분에서

"Waitfor~ 변수명 = new Waitfor~" 을 통해 변수를 생성하고

"yield return 변수명" 처럼 사용해서 최적화에 도움을 줄 수 있다는 교수님의 한마디를 기억하자!

 

 

** 틀린정보가 있거나 부족한 저에게 도움을 줄 추가 정보를 알고 계시다면 댓글로 남겨주세요 **