반응형
Invoke와 StartCoroutine 의 차이는 오브젝트 비활성화일때의 실행여부


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
void OnEnable()
{
   InvokeRepeating("Func1"01.0f);
 
   StartCoroutine(Func2());
 
}
 
void Func1()
{
  Debug.Log("Invoke");
}
 
 
IEnumerator Func2()
{
 
  while (true)
  {
    Debug.Log("Coroutine");
    yield return new WaitForSeconds(1.0f);
 }
}
 



컴포넌트가 활성화 됐을 때 Func1 과 Func2 를 각각 InvokeRepeating 과 StartCoroutine 으로 호출하고 있다.




이 상태에서 컴포넌트가 비활성화 되더라도 Func1 과 Func2 는 계속 수행된다. 단 게임 오브젝트가 비활성화되면 Coroutine 은 일시 정지하도록 되어 있기 때문에 Func2 는 수행되지 않고 Func1 은 여전히 호출된다.




다시 컴포넌트가 활성화가 됐다고 해보자. 결과는 Func1 과 Func2 가 매번 두 번씩 중복 호출된다. Invoke 혹은 Coroutine 모두 같은 함수에 대해 개별적인 호출로 본다.




이렇게 중복 호출되는 것을 막기 위해서 OnDisable 을 아래처럼 구현해주면 된다.




void OnDisable()


{


CancelInvoke();


StopAllCoroutines();


}




CancelInvoke 와 StopAllCoroutines 는 "현재 컴포넌트"에 존재하는 모든 Invoke 및 Coroutine 을 종료시킨다.




ref : http://cacodemon.tistory.com/entry/Invoke-와-Coroutine-주의사항








[invoke 관련 함수들]



오늘은 간단한 딜레이를 주고, 반복작업을 할때는 Coroutine보다 더 간편한 invoke함수에 대해서 알아보겠습니다.


invoke 함수는 총 4가지 함수만 알아두면 유용하게 사용할수있습니다.


1.Invoke 


위의 함수를 보시면 Invoke구문의 간단한 사용 예를 볼수있습니다. 

Invoke("실행하고자하는 함수" , 딜레이시간) 구문으로 간단하게 원하는 함수를 일정 시간 딜레이 후에

실행시킬 수있습니다. 위에 예에서는 LaunchProjectile 함수를 2초후에 실행시키는 구문을 보여주고있습니다.


2.InvokeRepeating



단순히 일정시간후에 함수를 실행시키는 것에서 더 나아가 딜레이후에  일정시간마다 함수를 반복적으로 실행시켜

주고싶을때 InvokeRepeating 함수를 사용합니다. 위의 Invoke함수에서와 달라진것은 0.3 의 float값이 들어간것인데

위의 예에서는 LaunchProjectile함수를 2초 딜레이후에 실행시킨후 0.3초마다 반복하여 실행시켜주는 구문입니다.


3.CancelInvoke


Invoke함수는 실행만큼이나 취소또한 쉽습니다. CancleInvoke함수르 간단하게 실행되고있는모든 Invoke함수를

취소시킬수있습니다. 위의 예에서는 Fire버튼을 누르면 실행되고있는 Invoke함수가 취소되는 것을 알수있습니다.


4.IsInvoking


 

현재 Invoke함수가 실행되고있는지 파악해 줄수있는 구문이 바로  IsInvoking함수입니다. 현재 invoke가 실행중일때 혹은 실행중이지 않을때를

판단하여 어떤 작업을 수행하려 할때 사용하는 함수로써.

위의 예시에서는 invoke함수가 실행중이지 않을때 , 스페이스 버튼을 누르면 Invoke함수가 실행되도록 작성되어있습니다.


이전포스팅의 Coroutine과 invoke 를 자유자재로 다룰수있다면 원하는 함수를 원하는 시간에 작동시키는것은

복잡한 쓰레딩을 익히지 않더라고 충분히 가능한 일일것입니다.



ref : http://blog.naver.com/enzymek/220273562019



반응형

+ Recent posts