내일배움캠프/TIL

중첩 코루틴, 다수의 코루틴

서보훈 2024. 11. 19. 21:02

유니티 공식문서의 코루틴 부분 마지막에는 이러한 문구가 있습니다.

 

일련의 작업을 최대한 적은 수의 개별 코루틴으로 압축하는 것이 가장 좋습니다. 중첩 코루틴은 코드 명료성과 유지관리에 용이하지만 코루틴이 오브젝트를 추적하기 때문에 더 많은 메모리가 소모됩니다.

코루틴이 매 프레임마다 실행되고 오래 실행되는 작업에서 yield 되지 않는 경우 Update 또는 LateUpdate 콜백으로 대체하는 것이 더 효과적입니다. 이는 오래 실행되거나 무한 루프되는 코루틴의 경우에 유용합니다.

 

이때, 중첩 코루틴의 경우, 실행중인 코루틴 내부에서 다른 코루틴을 호출하는 경우로, 이러한 경우를 사용하지 않는것을 권고하고 있습니다.

 

또한, while문을 사용하여 실행중 무한히 반복되는 코루틴이나 오랜시간동안 실행되는 코루틴에 대하여 Update 문에서 처리하는것을 권고하고 있습니다.

 

팀 프로젝트 진행중 투사체의 삭제에 관하여 코루틴을 사용하여 관리하는것을 준비하게 되었는데, 이 경우 굉장히 많은량의 투사체에 각자 코루틴을 가지게 됩니다.

 

이때의 코루틴 사용으로 인한 성능 문제를 고민하며 해당 내용을 찾아보았고, 명확한 해답은 안되어 튜터님에게 추가로 질문을 하게되었습니다.

 

질문의 결과로 모든 코루틴이 관리가 가능하다면 성능에 큰 문제는 없다라는 답변을 받았습니다.

저는 관리의 기준을 적절한 상황에 해제를 해줄 수 있는것으로 생각하여 코루틴이 시간이 지나면 자연적으로 해제 + 특정 상황에서 StopCoroutine 으로 해제를 할 수 있기 때문에 코루틴을 사용하여도 문제가 없다고 판단하게 되었습니다.

 

다만, 코드로 인한 성능저하의 요인중 다수의 인스턴스로 인한 성능저하가 발생 할 수가 있다고 하셨는데, 코루틴의

yield return new ~~ 구문의 경우 코루틴이 반복될 때 마다 새로운 객체를 생성되게 되기 때문에 삭제 시간을 투사체에 캐싱하는 방법을 사용하거나, 사용하지 않는것이 좋을 수 도 있음을 남겨두고 있습니다.