Programing/Unity(C#)

[C#] Coroutine 사용

hye3193 2024. 3. 22. 17:05

1. 코루틴 이름

private void Start()
{
    StartCoroutine(nameof(TestCoroutine)); // 코루틴 시작
    StopCoroutine(nameof(TestCoroutine)); // 코루틴 정지
    StartCoroutine(nameof(TestCoroutine)); // 코루틴 시작
}

private IEnumerator TestCoroutine()
{
    // 함수
}

코루틴 이름을 직접 명시하는 방식이다

* 매개변수를 전달할 수 없다

* stop coroutine으로 코루틴을 멈춘 후 다시 시작시킬 경우 이전 진행 상황은 초기화된다

 

2. 함수

private void Start()
{
    StartCoroutine(TestCoroutine()); // 코루틴 시작
    StartCoroutine(TestCoroutine()); // 코루틴 시작(중복으로 실행)
}

private IEnumerator TestCoroutine()
{
    // 함수
}

함수명을 명시하는 방식이다

* 여러번 start로 호출할 경우 함수가 여러 개 실행된다

* 매개변수를 전달할 수 있다

* 코루틴을 멈출 수 없다

 

3. IEnumerator

private void Start()
{
    IEnumerator testIEnumerator = TestCoroutine();
    StartCoroutine(testIEnumerator); // 코루틴 시작
    StopCoroutine(testIEnumerator); // 코루틴 정지
    StartCoroutine(testIEnumerator); // 코루틴 재시작(Resume)
}

private IEnumerator TestCoroutine()
{
    // 함수
}

IEnumerator 변수를 이용하는 방법이다

* stop coroutine으로 코루틴을 정지시켰다가 다시 start coroutine을 사용하면 이전 진행 상황에서 이어서 진행시킨다

private void Start()
{
    IEnumerator testIEnumerator = TestCoroutine();
    StartCoroutine(testIEnumerator); // 코루틴 시작
    StopCoroutine(testIEnumerator); // 코루틴 정지
    testIEnumerator = TestCoroutine(); // 재할당
    StartCoroutine(testIEnumerator); // 코루틴 시작
}

private IEnumerator TestCoroutine()
{
    // 함수
}

위와 같이 다시 코루틴을 시작시키지 전에 재할당을 해 주면 처음부터 시작하게 된다

 

 

4. Coroutine

private void Start()
{
    Coroutine testCo = StartCoroutine(TestCoroutine()); // 코루틴 시작
    StopCoroutine(testCo); // 코루틴 정지
    // StartCoroutine(testCo); : 불가능
}

private IEnumerator TestCoroutine()
{
    // 함수
}

Coroutine 변수를 사용하는 방법이다

* stop coroutine으로 정지시킨 후 다시 실행할 수 없다(Start Coroutine의 인자로 Coroutine 변수 전달이 불가능)