-
Unity에서의 Invoke, Coroutine, 그리고 멀티쓰레딩카테고리 없음 2024. 7. 16. 20:44
유니티 게임개발캠프 TIL 58일차
InvokeRepeating과 Coroutine의 동작
- InvokeRepeating
- 설명: InvokeRepeating을 통해 반복 실행 중인 메서드는 오브젝트를 비활성화하면 멈춥니다.
- 이유: 오브젝트가 비활성화되면 해당 오브젝트의 모든 Invoke 호출이 자동으로 취소됩니다.
- 사용 사례: 일정 시간 간격으로 간단한 작업을 반복 실행할 때 유용합니다.
- Coroutine
- 설명: Coroutine을 통해 반복 실행 중인 메서드는 오브젝트를 비활성화하면 멈춥니다.
- 이유: 오브젝트가 비활성화되면 해당 오브젝트에서 실행 중인 모든 코루틴이 자동으로 정지됩니다.
- 사용 사례: 비동기 작업을 처리하거나, 일정 시간 동안 작업을 반복하거나 지연할 때 유용합니다.
성능 최적화와 비동기 처리
- 메모리 사용 최적화
- 문제점: 매 프레임마다 renderer.material.color를 수정하는 코드는 메모리 사용량이 증가하여 성능 저하를 일으킬 수 있습니다.
- 해결 방법: 불필요한 메모리 할당을 줄이고, 자주 변경되지 않는 데이터는 캐싱하여 사용합니다.
- Coroutine의 비동기 동작
- 설명: Unity의 코루틴은 비동기 동작이지만, 하나의 스레드에서 동작합니다.
- 이유: 코루틴은 주 스레드에서 실행되며, 여러 스레드를 사용하지 않습니다. 이는 Unity의 메인 루프와 함께 동작하기 위해서입니다.
- 사용 사례: 피격 시 화면에 빨간 이미지를 띄워주고 서서히 사라지게 하는 기능에 활용해 봤습니다.
Invoke와 Coroutine의 차이점
- Invoke와 Coroutine 비교
- Invoke
- 설명: 일정 시간 후에 한 번 실행하거나 일정 간격으로 반복 실행하는 메서드 호출을 예약하는 기능을 제공합니다.
- 사용 사례: 간단한 지연 호출이나 반복 작업에 적합합니다.
- Coroutine
- 설명: yield 구문을 사용하여 비동기적으로 작업을 일시 중지하고 재개할 수 있습니다.
- 사용 사례: 더 복잡한 시간 기반 로직을 관리하는 데 유용합니다.
- Invoke
Coroutine과 멀티쓰레딩의 차이점
- Coroutine vs 멀티쓰레딩
- Coroutine
- 설명: 단일 스레드에서 비동기적으로 작업을 수행합니다.
- 특징: 메인 스레드에서 실행되며, Unity의 메인 루프와 함께 동작합니다.
- 사용 사례: 동시성 문제를 피하면서 간단한 비동기 작업을 처리하기에 적합합니다.
- 멀티쓰레딩
- 설명: 여러 스레드를 사용하여 동시에 여러 작업을 수행합니다.
- 특징: CPU의 여러 코어를 활용하여 병렬 처리를 가능하게 합니다.
- 사용 사례: 복잡한 병렬 작업에 더 적합합니다.
- Coroutine
- InvokeRepeating