Unity - Invoke(일정 시간 이후 호출)

김도현·2023년 10월 4일
0

TIL

목록 보기
43/76

Invoke란?

부르다, 언급하다 등등이라는 뜻
C#에서는 하나의 Form을 다른 Thread에서 접근하게 될 경우에 기존의 Form과 충돌이 날 수 있다.
이 때 Invoke를 사용하여 실행하려고 하는 메소드의 대리자(delegate)를 실행시키면 됩니다.

Unity내에서는 일정 시간이 지난 후에 해당 함수를 실행할 때 많이 사용됩니다. 어떻게 보면 Coroution(코루틴)과 비슷하지만 다른점은 Coroution은 시간을 지연키고 함수를 반복 실행을 하는 것이고, Invoke는 시간을 지연시키고 함수를 한 번만 실행을 시킨다는 점에 차이가 있습니다.

사용방법

Invoke("함수명", 지연시간);

함수명은 string형태로 입력해야됩니다.

InvokeRepeating

Invoke는 지연시간 후 한 번만 실행되지만 InvokeRepeating을 쓰게 되면 지정한 주기로 반복실행이 가능해 집니다.

사용방법

InvokeRepeating("함수명", 지연시간, 반복주기);

CancelInvoke

Invoke를 사용하다 보면 원하는 동작이 안될 수도 있습니다. 대부분의 이유가 현재 작업이 끝났는데 이미 예약된 인보크로 인해 한 번 더 실행되어 발생하는 문제일 것입니다.
이를 해결하는 방법이 CancelInvoke입니다.

사용방법

CanelInvoke(); //예약된 모든 Invoke를 캔슬합니다.
CanelInvoke("함수명"); //함수명으로 예약된 Invoke를 캔슬합니다.

Invoke 성능

C#에서는 Reflection이라는 강력한 기능이 있다.
이는 프로그램 실행 도중에 객체의 정보를 조사하거나, 다른 모듈에 선언된 인스턴스를 생성한다던지, 기존 객체에서 형식을 가져오고 해당하는 메서드를 호출, 접근할 수 있다.
하지만 단점으로는 이러한 기능들로 인해 성능면에서 떨어진다.

이러한 기능을 활용한 것이 Invoke이기에 Invoke도 성능이 떨어진다. 그러므로 Invoke에 비해 속도가 빠른 Coroution을 사용하는 것을 권한다.

TIP

Invoke는 오브젝트가 비활성화되어도 인보크가 살아있기에 주의를 해야한다.(왠만하면 Invoke 시작과 끝에는 CancelInvoke를 사용하면 좋다)

0개의 댓글