마지막으로 조금 더 디벨롭 해서
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를 사용한 문장도 오류없이 작동한다.
아래는 풀버전.
'📁 개발 히스토리' 카테고리의 다른 글
유니티 - 인벤토리 구현하기(2) (0) | 2025.02.22 |
---|---|
유니티 - 인벤토리 구현하기(1) (0) | 2025.02.22 |
유니티 - 캐릭터를 따라다니는 텍스트 박스(2) (0) | 2025.01.12 |
유니티 - 캐릭터를 따라다니는 텍스트 박스(1) (0) | 2025.01.11 |
유니티 - 자잘한 것들(try catch, 디버그 모드) (0) | 2023.04.16 |