서론
대화를 진행하는 도중에, 새로운 키워드가 등장하면 화면에 띄우는 코드이다. 키워드가 등장할 때, AppearKeyword() 코루틴을 시작하고 내부에서 Dotween을 이용해 키워드를 띄웠다.
문제는 2개의 키워드가 연달아 나왔을 때인데, AppearKeyword()를 두 번 연속으로 호출하다보니 뒤에 등장한 키워드만 화면에 보이게 되는 것이다. 때문에 첫번째로 호출된 코루틴이 끝나면 두번째 코루틴을 실행하도록 해야했다.
처음에는 코루틴 내부에서 yield return을 이용해 이후에 등장하는 코루틴을 멈추고자 하였다. 예를들면 코루틴이 진행중일 때, isResting 변수의 값이 false일 동안 멈춘다던지 하는 것이다.
하지만 별개의 코루틴을 제어하는게 생각보다 쉽지 않았고, 또 2개 이상의 키워드가 연달아 나왔을 때 문제가 될 수 있었기 때문에 결국은 Queue에 실행할 코루틴들을 쌓아놓고 하나씩 Dequeue하는 방식으로 코드를 수정하였다.
Field
큐를 만들고, 현재 코루틴이 실행중인지를 나타내는 runningCoroutine 변수를 만들었다.
EnqueueKeyword
대화 중에 keyword가 나올때 마다 EnqueueKeyword() 함수를 실행한다. runningCoroutine을 이용해 바로 화면에 띄우거나 Enqueue한다.
AppearKeyword
keyword를 띄우는 코루틴이다. 화면에 DOTween 라이브러리를 이용해 띄워주었고, Keyword 내용은 SetDialog를 통해 출력하였다. 큐에 현재 데이터가 있는지 확인하고 있다면 순차적으로 실행한다.