만재송
[Unity] 코루틴(Coroutine) 중단하기 본문
비동기 같이 처리할 코드를 코루틴을 사용하면 편리하게 구현할 수 있습니다. 사용방법도 간단합니다.
StartCoroutine("코루틴명칭") // string 또는 IEnumerator 메서드
중단하는방법도 간단합니다.
StopCoroutine("코루틴명칭")
하지만! Start 가 잘된다고 해서 Stop 도 그냥 함수명 써서 실행했는데 잘 안됩니다.
이유는 IEnumerator 메서드를 실행할때마다 참조값이 바뀌기 때문입니다. 보통 StartCoroutine 을 실행할때 아래와 같이 실행합니다.
StartCoroutine(TestCoroutine())
TestCoroutine 메서드를 실행한 반환값을 StartCoroutine 메서드에 전달합니다. 즉, TestCoroutine 실행할때마다 참조값이 바뀌게 되어서 아무리 StopCoroutine 을 실행해도 중단되지 않습니다.
그래서 해결법은 변수를 선언 후 할당해주어야 합니다.
public class Example : MonoBehaviour {
private IEnumerator coroutine;
void Start()
{
coroutine = TestCoroutine();
// 동작x
StartCoroutine(TestCoroutine());
StopCoroutine(TestCoroutine());
// 동작o
StartCoroutine(coroutine);
StopCoroutine(coroutine);
}
IEnumerator TestCoroutine()
{
yield return new WaitForSeconds(2f);
Debug.Log("테스트");
}
}
'프로그래밍 > Unity' 카테고리의 다른 글
[Unity] Spine(2) - 스파인 파일구조 (0) | 2019.08.08 |
---|---|
[Unity] Spine(1) - 패키지 Import (0) | 2019.08.08 |
[Unity] 유니티 VsCode 디버깅 방법 (0) | 2019.08.08 |
[Unity] Content Size Fitter 사용방법 (0) | 2019.08.08 |
[Unity] C# 확장메서드 (0) | 2019.08.08 |
Comments