코루틴(Coroutine)
- 여러 개의 루틴이 동시에 실행되며 서로 제어를 넘겨주는 방식.
- yield return을 사용하여 현재 위치를 기억하고 다른 루틴에게 수행 권한을 넘겨서 여러개의 쓰레드가 동시 동작하는 것과 같은 효과를 제공한다.
- 실제로는 단일 쓰레드 이기 때문에 멀티쓰레드가 가지는 교착 상태 경합 등의 문제에서 자유롭다는 장점이있다.
- 특정 조건이 충족될때까지 실행 상태를 지연시킬 수 있다.
- GameObject의 Active가 off가 된다면 이미 실행 중이었던 코루틴은 정지되며, StartCoroutine은 오류가 발생한다.
- 정지된 코루틴은 GameObject가 다시 Active가 되더라도 재 실행되지 않는다.
public void MyMethod()
{
StartCoroutine(MyCoroutine(int num));
}
IEnumerator MyCoroutine(int num)
{
yield return new WaitForSeconds(3f); // 3초 지연
Debug.Log(num);
}
Invoke
- 매개변수로 넘겨주는 시간 만큼 함수를 지연호출할 수 있다.
- GameObject의 Active가 off 상태에서도 호출된다.
- InvokeRepeat를 사용할 때 지연시간을 변수로 두고 변경하더라도 최초에 넘겼던 파라미터의 값으로 적용된다.
- 지연시간 이외의 매개변수를 전달할 수 없다.
- 함수이름을 string으로 넘기기 때문에 내부적으로 리플렉션을 사용한다는 것을 알 수 있다.
// 기본형
Invoke("함수이름", 시간);
// 반복 호출
InvokeRepeating("함수이름", 지연시간, 반복시간);
// 모든 Invoke 함수 취소
CancelInvoke();
// 함수가 실행되고있는지 조사
IsInvoking("함수이름");
구분 | Coroutine | Invoke |
GameObject Off 상태 실행여부 | X | O |
매개변수 전달 | O | X |
*단 오브젝트가 파괴된 경우라면 Invoke도 정지한다.
'🛡️ 기술 면접용 질문들 > 유니티 관련' 카테고리의 다른 글
쿼터니언 (Quaternion) (0) | 2023.03.17 |
---|---|
유니티 라이프 사이클(이벤트 함수의 실행 순서) (0) | 2021.04.22 |
드로우 콜(draw call), 배치(batch), set pass call, GPU Instancing (0) | 2021.04.22 |