사전캠프/Unity

유니티 기능 - TextMeshPro

서보훈 2024. 9. 4. 17:16

유니티는 현재 텍스트를 사용할 때 TextMeshPro 를 사용합니다.

 

이 기능은 레거시의 Text와 사용법이 크게 다르기 때문에, 사용법을 따로 알아야 할 필요가 있습니다.

 

처음 TextMeshPro를 통해 텍스트를 생성할 때, 추가 패키지를 설치하게 됩니다.

이후 TextMeshPro를 모두 TMP로 축약해서 부르겠습니다.

Import TMP Essentials 버튼을 눌러 패키지를 받아줍니다.

 

TMP로 만든 텍스트 오브젝트에는 이러한 컴포넌트가 붙게됩니다.

Font Asset 칸에 폰트를 넣어 텍스트의 폰트를 변경할 수 있으며, 해당 폰트에 속한 Material을 Material Perset 을 통해 골라서 사용할 수 있습니다.

 

Font Style을 통해 텍스트에 굵게, 기울임꼴, 밑줄, 취소선을 넣을수 있고, 영어의 경우 소문자,대문자 변환, 소문자를 작은 대문자로 변환해서 출력하도록 할 수 있습니다.

 

Font Size는 폰트의 크기를 정해줍니다.

Auto Size 옵션을 사용할경우 오브젝트의 크기에 맞추어 폰트 크기를 결정합니다.

 

Alignment 옵션은 정렬 방식을 선택합니다.

Warpping 기능은 입력한 텍스트가 오브젝트의 너비를 넘을경우 줄바꿈을 실행할 여부를 결정합니다.

Overflow는 텍스트가 오브젝트의 크기를 넘었을경우 어떻게 표기할것인지를 결정합니다.

 

폰트를 보시면 TMP_Font Asset 이라는 에셋을 사용하는것을 볼 수 있습니다.

TMP는 폰트 파일인 ttf를 사용하지 않고, 이 폰트파일을 이미지화 시켜서 사용합니다.

 

상단 도구모음에서 Window - TextMeshPro - Font Asset Creator 를 누르면 폰트를 TMP에서 사용할 수 있게 변환해주는 창이 나옵니다.

 

Source Font File 에 사용할 폰트파일을 올려놓구 세부 값을 세팅해줍니다.

 

해당 폰트의 경우 영어만 존재하기 때문에 ASCII 를 사용하지만, 한글폰트를 사용할경우 Character Set 옵션을

Unicode Range (Hex) 설정하고 범위를 설정해주어야 합니다.

또한, TMP는 폰트를 Texture로 변환하여 사용하는 방식이기 때문에, Atlas Resolution이 작을경우 폰트가 저화질로 나오는 경우도 있습니다.

변환후 폰트가 이상하게 나올경우 해당 옵션을 크게 잡아주는것이 좋습니다. 단, 그럴경우 처리 속도가 늦려지는 단점이 있습니다.

해당 이미지의 AC00-D7A3 는 가 - 힣 까지의 한글 조합 입니다.

이 범위를 사용할경우 자음,모음을 단독으로 사용할 때는 텍스트가 깨지는것을 볼 수 있습니다.

 

이 방법으로 생성되는 에셋을 선택해보면, Generating Settings 에 Atlas Population Mode 가 존재합니다.

해당 옵션의 기본값은 static으로, 생성할 때 선택된 범위의 폰트만 사용합니다.

이 옵션을 Dynamic으로 변경할경우, 새로운 글자를 사용할때마다 폰트 텍스쳐에 해당 글자의 폰트를 찾아서 추가하게됩니다.

이 옵션을 사용할경우 새로운 글자를 사용할때마다 에디터가 로딩을 하는것을 볼 수 있습니다.

또한 에디터에서만 폰트를 추가하는것이기 때문에, 빌드한 게임에서는 에디터에서 사용하지 않은 글자 사용시, 폰트가 깨지게 됩니다.

 

 

SDF 의 구성요소를 보면, Atlas와 Material 으로 구성되어있는것을 볼 수 있습니다.

여기서 Material을 수정하여 텍스트에 효과를 줄 수 있습니다.

Material 을 복제한 뒤 _1을 붙여 구분하도록 하겠습니다.

이후 만들어준 텍스트의 Material Preset을 _1이 붙은 Material으로 변경해주었습니다.

인스펙터창의 값을 수정하는것으로 텍스트에 효과를 줄 수 있습니다.

아웃라인을 파란색, 0.1 두께로 주고 언더레이를 통해 텍스트에 그림자 효과를 주었습니다.

같은 폰트라도 Material을 늘려서 다양한 효과를 가진 폰트를 만들어 줄 수 있습니다.

 

TMP를 스크립트에서 사용하는것은 기존 레거시와 크게 다르지 않지만, TMPro 네임스페이스를 사용하게됩니다.

using TMPro;

 

또한, 텍스트를 조작하는 클래스명이 TextMeshProUGUI가 됩니다.

이 클래스를 사용하여 변수를 만들어 텍스트를 조작하게됩니다.

public TextMeshProUGUI textBox;

 

이 외에는 레거시 텍스트와 사용법이 같습니다.

변수명.text = 문자열 을 사용하여 텍스트 내용을 스크립트를 통해 변경할 수 있습니다.

void Start()
{
    textBox.text = "텍스트변경";
}