인보크 - 단순하게 메서드 호출의 딜레이가 필요할 때 쓰면 깔끔함 대신 처음 호출 당시 세팅이 유지됨
코루틴 - 좀 더 유연하게 사용할 수 있음
간단한 코드와 결과
private void Start()
{
Debug.Log("Start : " + Time.time);
StartCoroutine("PrintCoroutine");
Invoke("PrintInvoke", 3f);
}
private void PrintInvoke()
{
Debug.Log("PrintInvoke : " + Time.time);
}
private IEnumerator PrintCoroutine()
{
yield return new WaitForSeconds(3f);
Debug.Log("PrintCoroutine : " + Time.time);
}
단순하게 3초 후 실행되는 결과
private IEnumerator Start()
{
Debug.Log("Start : " + Time.time);
StartCoroutine("PrintCoroutine");
Invoke("PrintInvoke", 3f);
yield return new WaitForSeconds(1f);
gameObject.SetActive(false);
Debug.Log("Disable : " + Time.time);
}
private void PrintInvoke()
{
Debug.Log("PrintInvoke : " + Time.time);
}
private IEnumerator PrintCoroutine()
{
yield return new WaitForSeconds(3f);
Debug.Log("PrintCoroutine : " + Time.time);
}
인보크는 해당 오브젝트가 꺼져도 실행되고 코루틴은 멈춤
private IEnumerator Start()
{
Debug.Log("Start : " + Time.time);
StartCoroutine("PrintCoroutine");
Invoke("PrintInvoke", 3f);
yield return new WaitForSeconds(1f);
this.enabled = false;
Debug.Log("Disable : " + Time.time);
}
private void PrintInvoke()
{
Debug.Log("PrintInvoke : " + Time.time);
}
private IEnumerator PrintCoroutine()
{
yield return new WaitForSeconds(3f);
Debug.Log("PrintCoroutine : " + Time.time);
}
오브젝트가 아닌 컴포넌트를 disable 시켜도 둘 다 멈추지 않음
InvokeRepeating이라는 것도 있는데 이름처럼 그냥 반복해주는 것
개인적으론 굳이 코루틴 대신 쓰는 경우가 많지는 않은 듯
그리고 중지하려면 CancelInvoke을 사용해주면 됨
InvokeRepeating과 Coroutine을 백만 번 돌리면?
private IEnumerator Start()
{
for (int i = 0; i < 1000000; i++)
{
InvokeRepeating("PrintInvokeRepeating", 3f, 0.5f);
}
for (int i = 0; i < 1000000; i++)
{
StartCoroutine("PrintCoroutine");
}
}
private void PrintInvokeRepeating()
{
int i = 0;
i++;
}
private IEnumerator PrintCoroutine()
{
yield return new WaitForSeconds(3f);
WaitForSeconds wait = new WaitForSeconds(0.5f);
while (true)
{
int i = 0;
i++;
yield return wait;
}
}
코드에서는 스타트에서 같이 돌리는 것처럼 보이지만 실제론 따로 테스트해봄
결과
Coroutine
InvokeRepeating
차이가 나긴 하는데.... 실제 프로젝트에서 유의미하게 차이가 날 것인가는 잘 모르겠음
'개발 > Unity, C#' 카테고리의 다른 글
Unity UGUI Text에서 특정 단어의 위치 찾기 (0) | 2019.09.12 |
---|---|
Unity Update문에 대해서 (0) | 2019.07.27 |
C# AES 암호화 (0) | 2019.07.24 |
C# Enum 사용시 Garbage 문제 (0) | 2019.07.16 |
Unity 2019 LWRP Camera Stacking (0) | 2019.07.14 |