[Unity] Coroutine VS Invoke
안녕하세요. 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