반응형
타이핑하는 효과를 넣었는데 코루틴이 두번 실행되게 되면서 글자가 두개씩 나오는 문제가 발생하였다.
사용했던 타이핑 코드
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));
}
반응형
'유니티 공부 > Unity' 카테고리의 다른 글
Unity - MissingReferenceException 에러 해결 방법(+) Dontdestroyonload) (0) | 2025.05.02 |
---|---|
Unity - 상속 구조에서 호출 누락 조심! (0) | 2025.05.01 |
Unity - 디버그 프로필에 지정된 디버그 실행 파일 .exe가 없습니다 에러 (0) | 2025.04.21 |
C# - JSON 파일 직렬화/역직렬화시 주의 사항 정리(Tuple, 프로퍼티, 한글이 깨지는 경우) (0) | 2025.04.15 |
Unity - 점과 직선사이의 거리를 구해보자(벡터 투영 공식 활용) (0) | 2025.04.10 |
댓글