본문 바로가기
유니티 공부/Unity

Unity - 코루틴 중복 사용 막는법

by 코딩하는 돼징 2025. 5. 1.
반응형

타이핑하는 효과를 넣었는데 코루틴이 두번 실행되게 되면서 글자가 두개씩 나오는 문제가 발생하였다.

 

사용했던 타이핑 코드

private IEnumerator TypingText(TextMeshProUGUI messageText, string message)
{
    messageText.text = "";
    for (int i = 0; i < message.Length; i++)
    {
        messageText.text += message[i];
        yield return new WaitForSeconds(typingSpeed);
    }
}

 

ShowDialogue()메서드에서 대화를 시작하면서 코루틴을 실행하였다.

public void ShowDialogue(TextMeshProUGUI messageText, string message)
{
    StartCoroutine(TypingText(messageText, message));
}

 

여기서 문제가 발생했다! 코루틴이 중복 실행된 것이다.

NPC와 여러번 대화를 했을 경우 글자가 두 줄씩 겹쳐서 실행이 되는것이었다.

왜 이러한 문제가 발생하는 것일까?

StartCoroutine은 매번 새로운 비동기 작업을 추가로 실행한다. 기존 코루틴이 아직 끝나지 않았더라도 겹쳐서 동시에 실행되기 때문에 명시적으로 Stop하지 않으면 중복 실행될 수 있다.

 


해결 방법 - 기존 코루틴을 멈추고 새로 시작

코루틴을 변수로 저장한 다음 새로 시작하기 전에 기존 코루틴이 실행중이면 StopCorourtine()으로 종료시키면 된다. 그러면 즉시 종료된다. 종료된 코루틴은 더 이상 존재할 수 없다.

private Coroutine typingCoroutine;

public void ShowDialogue(TextMeshProUGUI messageText, string message)
{
    if (typingCoroutine != null)
    {
        StopCoroutine(typingCoroutine); // 이전 코루틴 정지
    }

    typingCoroutine = StartCoroutine(TypingText(messageText, message));
}

 

반응형

댓글