📁 개발 히스토리

유니티 - 캐릭터를 따라다니는 텍스트 박스(3)

일단몸통박치기 2025. 1. 13. 18:00

마지막으로 조금 더 디벨롭 해서

TMP가 HTML처럼 string을 통해 볼드, 이탤릭체, 사이즈, 색상 변경 등이 가능한 점을 고려해

예외처리를 추가했다.

 

 Rich Text 관련 문서

(https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/RichText.html)

 

간단하게 태그를 이용해서 <b>와 </b> 사이의 문자는 굵게 되는 식이다.

볼드 : <b></b>
이탤릭 : <i></i>
색상 : <color=#000000></color>
크기 : <size=32></size>

 

 

 

 

예외처리는 간단하게 여는 꺾쇠 <가 등장하면 닫는 꺾쇠 >가 나올때까지 출력할 문장Count를 증가시키는 방식으로 했으나 연속으로 꺾쇠가 등장하는 경우 열린 꺾쇠를 감지하지 못하는 오류가 발생해서

닫는 꺾쇠 이후 다시 열린 꺾쇠가 등장하는 지 확인하고 for문을 탈출하지 못하도록 수정했다.

 

    private void Update()
    {
        if (CurrentBoxState == BoxState.TextFlow)
        {
            time += Time.deltaTime;

            if(time > TextSpeed)
            {
                time = 0;

                if(DialogCount >= CurrentDialog.Length)
                {
                    StopText();
                }
                else
                {
                    //만약에 <로 시작하는 글자열이라면
                    if(CurrentDialog[DialogCount].ToString() == "<")
                    {
                        // >가 나올때까지 DialogCount를 증가시킴
                        for(int i = DialogCount; i < CurrentDialog.Length; i++)
                        {
                            DialogCount++;
                            if (CurrentDialog[DialogCount].ToString() == ">")
                            {
                                DialogCount++;
                                if(DialogCount >= CurrentDialog.Length)
                                {
                                    break;
                                }
                                else if (CurrentDialog[DialogCount].ToString() == "<")
                                {
                                    DialogCount++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    }


                    Text.text = CurrentDialog.Substring(0, DialogCount);
                    TextSound.Play();
                }
                DialogCount++;
            }
        }

 

 

 

그리고 저번 포스트에서 자세하게 설명하지 않았던

애니메이션 종료 이벤트

 

이렇게 Add Animation Event를 통해서 키를 추가한 후 인스펙터 창에서 함수를 할당할 수 있는데

아쉽게도 Animator가 있는 오브젝트에 달린 스크립트에서만 가져올 수 있어서

TextBoxHandler라는 스크립트를 따로 추가하여 사용했다.

추후 실제 텍스트박스를 사용하게 될 때는 아예 Image에 스크립트를 붙여 실행시키면 될 것 같다.

 

 

 

마지막으로 딸깍거리는 앵커 애니메이션을 넣어 문장이 완성되었을때만 켜고

글자를 출력할때 사운드도 출력하게 하면 완성.

 

 

 

 

 

 

문제없이 출력된다.

 

RichText를 사용한 문장도 오류없이 작동한다.

아래는 풀버전.