Invoke와 Coroutine

baebaeran·2024년 5월 12일
0

Unity_메모장

목록 보기
4/14

둘 다 함수의 순서에 상관없이 따로 시간이 흐른다.

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"가 찍힌다.)

profile
보고-배우는-것-들을-기록합니다

0개의 댓글