이전 글에서는 yield return을 활용하여 2D 스프라이트 애니메이션을 구현하는 방법을 다루었습니다. 이번 글에서는 코루틴을 중지하는 다양한 방법과 yield break 를 활용하는 방법을 살펴보겠습니다.
StopCoroutine()을 사용하여 코루틴 중지하기
Unity에서는 StopCoroutine()을 사용하여 실행 중인 코루틴을 중지할 수 있습니다. StopCoroutine()에는 두 가지 방식이 있습니다.
1. 코루틴의 이름을 사용하여 중지
void Start()
{
StartCoroutine("ExampleCoroutine");
}
IEnumerator ExampleCoroutine()
{
while (true)
{
Debug.Log("코루틴 실행 중");
yield return new WaitForSeconds(1f);
}
}
void StopMyCoroutine()
{
StopCoroutine("ExampleCoroutine");
}
하지만 문자열을 사용하는 방식은 추천되지 않습니다.
이유는 컴파일 시 함수 이름을 확인할 수 없고, 오타가 발생할 가능성이 있기 때문입니다.
2. 코루틴의 참조를 저장하여 중지
더 안전한 방식은 코루틴의 참조를 저장하고 이를 통해 중지하는 방법입니다.
Coroutine runningCoroutine;
void Start()
{
runningCoroutine = StartCoroutine(ExampleCoroutine());
}
void StopMyCoroutine()
{
if (runningCoroutine != null)
StopCoroutine(runningCoroutine);
}
이 방식은 직접 실행한 코루틴의 참조를 저장하여 중지하기 때문에, 오타 문제 없이 안전하게 사용할 수 있습니다.
yield break 를 사용하여 내부적으로 코루틴 종료하기
코루틴 내부에서 특정 조건이 만족되었을 때 코루틴을 중지하고 싶다면 yield break;를 사용할 수 있습니다.
IEnumerator ExampleCoroutine()
{
Debug.Log("코루틴 시작");
yield return new WaitForSeconds(1f);
if (SomeCondition())
{
Debug.Log("코루틴 조기 종료");
yield break; // 코루틴 즉시 종료
}
Debug.Log("코루틴 계속 실행");
yield return new WaitForSeconds(1f);
}
이렇게 하면 SomeCondition()이 true일 경우, 코루틴이 즉시 종료됩니다.
StopAllCoroutines() 로 모든 코루틴 중지하기
StopAllCoroutines()을 사용하면 현재 실행 중인 모든 코루틴을 중지할 수 있습니다.
void StopEverything()
{
StopAllCoroutines();
}
하지만 이 방법은 현재 실행 중인 모든 코루틴을 중지하기 때문에, 특정 코루틴만 멈추고 싶다면 사용하지 않는 것이 좋습니다.
마무리
StopCoroutine()을 사용하면 실행 중인 특정 코루틴을 중지할 수 있다.
문자열을 사용하는 StopCoroutine("CoroutineName") 방식보다는, 코루틴의 참조를 저장하여 중지하는 것이 더 안전하다.
yield break;를 사용하면 특정 조건이 충족되었을 때 코루틴을 내부적으로 종료할 수 있다.
StopAllCoroutines()는 모든 코루틴을 한 번에 중지할 수 있지만, 주의해서 사용해야 한다.
이번 글에서는 코루틴을 중지하는 다양한 방법을 알아보았습니다.
다음 글에서는 코루틴의 최적화 방법과 InvokeRepeating()과의 차이점을 살펴보겠습니다!
'C#' 카테고리의 다른 글
8. yield return 에 대해 ( 그 외 ) (0) | 2025.03.09 |
---|---|
7. yield return 에 대해 ( 최종화 : 최적화 ) (0) | 2025.03.09 |
5. yield return 에 대해 ( 활용 02 ) (0) | 2025.03.09 |
4. yield return 에 대해 ( 활용 01 ) (0) | 2025.03.09 |
3. yield return 에 대해 (유니티에서의 동작) (0) | 2025.03.09 |