🌍 Unity/유니티 엔진 동작 관련
유니티 StopCoroutine이 동작하지 않을 때 Unity Stop Coroutine doesn't work
맨텀
2019. 5. 1. 02:30
유니티 코루틴 호출하는 방법 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방식은 이름이 같은 모든 코루틴을 조작한다.