Invoke
Invoke("메소드 이름", 시간값)
Invoke(string MethodName, float time)
호출할 함수의 이름을 넣고 몇 초 뒤에 호출할 것인지 적으면 된다.
Invoke("addvalue", 5f);
위 코드는 addvalue
라는 이름의 함수를 5초
뒤에 호출시킨다는 뜻이 된다.
InvokeRepeating("메소드 이름", 시간값, 반복값)
InvokeRepeating(stirng MethodeName, float time, float RepeatTime)
Invoke 함수와 비슷하지만 조금 다르다.
첫 함수 실행 시간을 지연시켜주고, 지연시킨 뒤에는 일정 시간마다 반복 호출한다.
InvokeRepeating("addvalue", 5f, 2f);
위 코드는 addvalue
라는 이름의 함수를 5초
뒤에 처음 호출
하고, 호출 이후
부터는 2초마다 계속 반복적
으로 호출한다.
(3번째 매개변수에 0을 넣을 경우, 아예 동작하지 않는다.)
CancelInvoke("메소드 이름")
CancelInvoke("string MethodName")
작동하는 인보크를 멈추게 하는 함수이다.
메소드 이름을 넣으면 해당 인보크만 멈추게 한다.
적지 않고 공백으로 호출하면 현재 존재하는 모든 인보크가 멈춘다.
CancelInvoke("addvalue");
위 코드는 addvalue
에 걸린 인보크를 멈추게 한다.
InvokeRepeating
을 사용했다면, CancelInvoke
를 통해 예외처리를 두고 멈추게 만드는 것이 좋다.
그러지 않는다면 해당 게임오브젝트가 파괴되지 않는한, InvokeRepeating
은 계속 작동될 것이다.
IsInvoke("메소드 이름")
IsInvoke(string MethodName)
현재 인보크가 작동하고 있는지 알려주는 기능이다.
bool
값으로 반환(True / False)
되며, 이름을 넣으면 해당 메소드가 동작 중인지 알 수 있다.
만약 입력하지 않고 사용한다면 현재 동작중인 인보크가 있는지 알 수 있다.
IsInvoke("addvalue");
위 코드는 addvalue
에 Invoke
가 작동하고 있는지 알려준다.
사실 유니티 공식 문서에서도 그렇고, 다른 인터넷 자료들을 보면 성능 향상이나 유지 보수를 위해서는 코루틴(Coroutine) 사용을 권장하고 있다.
매개 변수를 직접 넣는게 아닌 매개 변수의 이름을 넣다보니 이를 이름을 통해 찾기 위한 과정에서 많은 시간이 소요된다고 한다.
이게 물론 사람이 체감될 정도는 아니지만, 이 Invoke
가 계속 쌓이고 쌓이다보면 게임의 사양자체도 올라갈 수 있으며, 상태가 심각해지면 최적화를 위해 사용한 Invoke
코드를 대부분 갈아엎을 수도 있다고 한다.
(메소드 이름을 통해 함수를 찾는 방법은 C#
의 리플렉션 기능`을 사용한다고 한다.)
개인 공부용으로 정리한 내용입니다.
틀린 내용이 존재할 수 있으며, 있다면 댓글로 알려주시면 감사하겠습니다.
(2024-04-19)