팀 프로젝트
오늘은 팀 프로젝트 마무리하는 날이여서 오전에는 UI를 깔끔하게 하거나 미처 완료하지 못한 기능을 완성하는데 집중했다. 그 후 다른 팀들의 프로젝트 발표를 듣고 회고를 진행하였다.
Unity : Invoke와 Coroutine의 차이
🌐 코루틴
Coroutine은 함께, 같이, 서로를 의미하는 접두사 Co와 routine의 합성어로 여러개의 루틴을 동시에 실행하게 해주며 멀티 쓰레드가 아닌 Unity에서 멀티쓰레드처럼 병렬구조를 만드는 기능입니다.
Coroutine을 사용할 때는 항상 yield return을 해주어야 하는데, 이를 통해서 현재 위치를 기억하고 다른 루틴에게 수행권한을 넘겨주고 다시 와서 처리하는 방식이다.
멀티 쓰레드 같지만 단일 쓰레드이기 때문에 Race Condition과 같은 멀티 쓰레드 문제점은 고민하지 않아도 된다.
💽 코루틴 특징
- 코루틴은 해당 GameObject가 inactive일때 동작하지 않는다.
- 정지 된 코루틴은 다시 GameObject가 Active 되더라도 다시 동작하지 않는다.(다시 실행을 시켜주어야한다.)
- 실행 할 함수에 매개변수를 담아서 보낼 수 있다. (Invoke는 불가능하다)
- yield return new WaitForSeconds(시간). 함수 중간 중간 쉬었다가 동작 시킬 수 있는데 매우 간편하고, Update를 통해 Timer를 만들어 시간을 재는것 보다 효율적이다.
왜 효율적인가?
5초 뒤 동작을 위해 코드를 구현할 떄 Update에서는 초당 50프레임 정도를 동작하면서 250번을 호출하면서 동작을 하는데, 코루틴은 엔진에게 5초 뒤에 깨우라고 맡기고 쉬다가 동작하니 더 효율적일 수 밖에 없다.