둘 다 함수의 순서에 상관없이 따로 시간이 흐른다.
void Velog()
{
Invoke("Velog2", 2f);
Debug.Log("함수 실행");
}
void Velog2()
{
Debug.Log("함수 실행2");
}
Invoke의 기본 형태는
Invoke("함수 이름", 시간);
이거 이고, Deubg.Log가 Invoke의 위에 있든, 아래에 있든 콘솔에 "함수 실행"이 먼저 찍히고 2초가 지난 후에 "함수 실행2"가 찍힌다. 이렇듯 Invoke를 사용한다고 해도, 2초가 지난 후에 그 뒤에 함수가 실행되는 것이 아니다.
(코드는 위에서 순서대로 실행이 되고, Invoke로 인해 Velog2()만 2초후에 실행될 뿐. Velog가 중간에 2초 멈추고 실행되는 것이 아니다.)
void Velog()
{
StartCoroutine(Velog2());
Debug.Log("함수 실행");
}
IEnumerator Velog2()
{
Debug.Log("실행");
yield return new WaitForSeconds(2f);
Debug.Log("실행2");
}
Coroutine의 기본 형태는
IEnumerator "함수 이름"()
{
Debug.Log("실행");
yield return new "여러 코루틴 함수";
Debug.Log("실행2");
}
void Velog()
{
Debug.Log("함수 실행");
StartCoroutine("사용할 함수 이름"());
}
Invoke와 동일하게 StartCoroutine안에 있는 함수는 시간이 지나고 후에 실행되므로 Debug.Log가 StartCoroutine의 위, 아래 상관없이 "함수 실행"이 콘솔에 먼적 찍힌다고 생각하면 된다. 하지만, Invoke와 Coroutine은 차이점이 명확하다.
Invoke는 함수 발사대라고 할 수 있으면, Coroutine은 함수 발사대 겸 함수 그 자체가 될 수 있다.
Invoke와 달리 변수를 받을 수 있으며, 시간이 지나게 하는 타이밍을 내가 직접 조절할 수 있다.
IEnumerator "함수 이름"()
{
Debug.Log("실행");
yield return new WaitForSeconds(2f);
Debug.Log("실행2");
}
위의 함수에서 coroutine은 yield return new WaitForSeconds(2f); 이 코드에 의해 시간이 2초 지나고 아래에 코드가 실행된다.
(콘솔에 "실행"이 찍히고 2초 후에 "실행2"가 찍힌다.)