유니티 StopCoroutine이 동작하지 않을 때 Unity Stop Coroutine doesn't work

유니티 코루틴 호출하는 방법 2가지가 있다.

 

[ A ] 직접 호출

StartCoroutine(Method());
StartCoroutine(Method(object value)); // 매개변수

[ B ] String 호출

StartCoroutine("Method");
StartCoroutine("Method", value);

 

B는 스트링이라 호출 오버헤드가 발생. 이후의 성능 차이는 없다고 한다.

하지만 그렇다고 A를 쓰기엔 주의해야 될 점이 있는데,

 

A방식으로 호출한 코루틴은 StopCoroutine을 사용할 때 string으로 호출해도 중지시킬 수 없다.

StartCoroutine( Method());
StopCoroutine( Method()); // 중지되지않음 : 잘못된 사용법


StartCoroutine( Method() );
StopCoroutine( "Method" ); // 중지되지않음


StartCoroutine( "Method" );
StopCoroutine( "Method" ); // 중지됨

 

아래가 올바른 사용법.

Coroutine runningCoroutine = null;  //코루틴 변수. 1개의 루틴만 돌리기 위해 저장한다.

//만약 이미 돌고 있는 코루틴이 있다면, 정지시킨 후 코루틴을 실행한다.
if(runningCoroutine != null)
{
    StopCoroutine(runningCoroutine);
}
runningCoroutine = StartCoroutine(ScaleUp()); //코루틴을 시작하며, 동시에 저장한다.

 

 

정리하자면,

1. String으로 호출한 Coroutine은 String으로 멈출 것.

2. 직접 호출한 코루틴은 반환 값을 저장한 다음에 저장된 반환 값을 사용하여 멈출 것.

 

# 참고로 코루틴을 여러 개 돌리고 싶다면 변수 방식으로 해야 한다. string방식은 이름이 같은 모든 코루틴을 조작한다.

 

 

댓글

Designed by JB FACTORY