Unity

[Unity] Coroutine VS Invoke

JayLee 2020. 4. 11. 00:42
반응형

안녕하세요. Jay입니다.

일반적으로 주기적으로 함수를 반복할 때 유니티에서는 Coroutine과 Invoke를 사용합니다. 그렇다면, 이 두 메서드는 각각 어떤 특징이 있는지 알아볼까요?

 

Coroutine

- 코루틴은 실행을 중지하여 Unity에 제어권을 돌려주고, 그러나 계속할 때는 다음 프레임에서 중지한 곳부터 실행을 계속할 수 있는 기능

- IEnumerator를 반환 값으로 가짐.

- yield return 구문을 어딘가에 가짐 (참고로, yield return은 실행을 중단 시키고 다음 프레임에 이후 구문이 실행되도록 함).

- 유니티에서는 IEnumerator 반환형은 명시할 필요는 없음.

일반적으로 코루틴은 yield를 실행한 바로 다음 프레임에서 재개되지만, 지연후 실행하기 위해서는 WaitForSeconds 함수를 이용하면 됨.

- Update문이 너무 많이 호출되어 성능적으로 좋지 않을 때, Coroutine을 이용하여 성능 최적화가 가능함.

- Game Object가 Inactive(Active가 false)일 경우에는 동작하지 않음

 

- Coroutine example

// Coroutine 정의
IEnumerator Func()
{
    yield return;
}

// Coroutine 실행
StartCoroutine("Func");

// 0.1초 지연 후 시작하도록 설정
IEnumerator Func()
{
    yield WaitForSeconds(0.1);
}

 

Invoke

public void Invoke(string methodName, float time);

- 설정한 시간에 methodName 메서드를 호출함.

- Game Object의 Active 상태에 상관없이 동작함.

 

 

참고:

https://docs.unity3d.com/kr/530/Manual/Coroutines.html

https://docs.unity3d.com/kr/530/ScriptReference/MonoBehaviour.Invoke.html

 

반응형