안녕하세요. 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
'Unity' 카테고리의 다른 글
[Unity] sprite 동적으로 변경하기(Resources.LoadAll) (1) | 2020.07.03 |
---|---|
[Unity] tag 비교하기('CompareTag()' VS '== tag') (0) | 2020.04.12 |
[Unity] Update() vs FixedUpdate() (0) | 2020.04.09 |
[Unity] Circular Progress Bar(원형 진행바) 구현하기 (2) | 2020.04.08 |