Invoke 함수는 간단하게 함수를 지연 시간 이후 실행하거나 반복할 수 있어 편리하다.
하지만 코루틴(Coroutine)과 다르게 매개변수를 받을 수 없고, 성능도 느리다는 단점이 있다.
Invoke와 관련된 함수는 아래와 같이 6개가 있다.
실행 / 반복 / 취소 / 확인으로 나뉜다.
void Invoke(string methodName, float time)
ㄴ methodName 함수를 time 뒤에 실행한다.
void InvokeRepeating(string methodName, float time, float repeatRate)
ㄴ methodName 함수를 time 뒤에 repeatRate마다 호출한다.
void CancelInvoke();
ㄴ 모든 Invoke를 취소한다.
void CancelInvoke(string methodName);
ㄴ methodName Invoke만 취소한다.
bool IsInvoking();
ㄴ 현재 유니티 씬에서 Invoke 함수가 실행 중인지 체크한다.
bool IsInvoking(string methodName);
ㄴ 현재 유니티 씬에서 methodName Invoke 함수가 실행 중인지 체크한다.
위의 내용을 바탕으로 InvokeTest.cs를 만든다.
진행된 시간을 알기 위해 TextMeshProUGUI로 간단한 스톱워치를 만들었다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class InvokeTest : MonoBehaviour
{
public TextMeshProUGUI timer;
float time;
void myInvoke()
{
string ct = string.Format("{0:N3}", time);
Debug.Log("Current Time : " + ct + " / Invoke ? " + IsInvoking());
}
void Start()
{
Invoke("myInvoke", 1f); // 1초 뒤 시작
InvokeRepeating("myInvoke", 2f, 3f); // 2초 뒤 시작하고, 3초마다 반복.
}
void Update()
{
time += Time.deltaTime;
timer.text = string.Format("{0:N3} s", time);
if (time > 10f)
{
if(IsInvoking("myInvoke"))
{
CancelInvoke(); // 모든 Invoke 종료.
//CancelInvoke("myInvoke"); //특정 함수만 종료
Debug.Log(
"myInvoke end : " + string.Format("{0:N3}", time) + " / Invoke ? " + IsInvoking()
);
}
}
}
}
Canvas - Text(TMP)를 추가한 후, 빈 오브젝트에 스크립트를 추가하고 아래와 같이 설정한 후, 게임을 실행하자.
1초 뒤에 함수가 실행되었다.
2초 뒤에 다시 실행되었고, 3초마다 반복 후, 10초 뒤에는 더 이상 실행되지 않는다.
Unity Plus:
Unity Pro:
Unity 프리미엄 학습:
댓글