반응형

안녕하세요.

지연실행과 관련되어, Invoke, InvokeRepeating, CancelInvoke에 대해 알아보도록 하겠습니다.

 

1. Invoke

Unity 스크립트 작업중에 함수가 일정시간만큼 지연된 후 실행이 되게 하고자 할때 Invoke함수를 사용할 수 있습니다.

Invoke함수를 모른다면 코루틴(coroutine)을 사용해서 시간 지연을 준 후 실행되게 할수있지만 단순히 시간을 지연한 후 함수를 실행 시킨다면 Invoke로 쉽게 구현할 수 있습니다.

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

예제

1
2
3
4
5
6
7
8
9
10
void Start()
{
    Debug.Log("Start() Time : " + Time.time);
    Invoke("FuncInvoke"5.0f);
}
 
void FuncInvoke()
{
    Debug.Log("FuncInvoke() Time : " + Time.time);
}
 
cs

다음과 같이 출력이 됩니다.

이렇게 한다면 시작 후 5초 후 FuncInvoke함수가 호출됩니다.

 

2. InvokeRepeating

Invoke함수는 지연시간 후 한번만 실행이되는데 여러번 반복실행을 위해서는 InvokeRepeating함수를 사용해서 지정한 주기로 반복할 수 있습니다.

형식
InvokeRepeating(함수명, 지연시간, 반복주기);
지연시간만큼 지연된후 반복주기 만큼 계속 반복합니다.

예제

1
2
3
4
5
6
7
8
9
10
void Start()
{
    Debug.Log("Start() Time : " + Time.time);
    InvokeRepeating("FuncInvoke"5.0f, 1.0f);
}
 
void FuncInvoke()
{
    Debug.Log("FuncInvoke() Time : " + Time.time);
}
 
cs

다음과 같이 출력됩니다.

5초 후 FuncInvoke함수가 호출되고, 1초마다 FuncInvoke가 계속 반복됩니다.

멈추기위해서는 CancelInvoke함수를 이용합니다.

 

3. CancelInvoke

실행중인 Invoke함수를 중지합니다

형식
CancelInvoke(함수명);

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int m_nCount = 0;
 
void Start()
{
    Debug.Log("Start()");
    InvokeRepeating("FuncInvoke"5.0f, 1.0f);
}
 
void FuncInvoke()
{
    m_nCount++;
    Debug.Log("FuncInvoke()");
 
    if( m_nCount >= 5 )
        CancelInvoke("FuncInvoke");
}
 
cs

다음과 같이 출력됩니다.

InvokeRepeating로 인해 FuncInvoke가 5번 반복되면 CancelInvoke함수로 더 이상 반복되지 않도록 합니다.

반응형

+ Recent posts