핵심 정리
| 항목 | 내용 |
|---|---|
| 역할 | 고품질 텍스트 렌더링과 자동 줄바꿈, 오토사이즈, 풍부한 정렬/오버플로우 옵션 제공 |
| 언제 쓰는가 | HUD 텍스트, 대사, 버튼 라벨, 데미지 숫자, 월드 공간 텍스트를 다룰 때 |
| 기준 버전 | Unity 6.5 (6000.5) |
| 핵심 Inspector | Text Input, Font Asset, Material Preset, Font Size, Auto Size, Wrapping, Overflow, Alignment, Rich Text |
| 자주 연결되는 API | text, SetText, color, fontSize, enableAutoSizing, overflowMode |
Inspector 설정
| 설정값 | 언제 바꾸는가 | 잘못 맞추면 생기는 문제 |
|---|---|---|
| Text Input | 초기 문자열이나 프리뷰 문구를 둘 때 | 플레이 데이터가 아닌 임시 문구가 남을 수 있음 |
| Font Asset / Material Preset | 폰트, 외곽선, 발광 느낌을 바꿀 때 | 필요한 글리프가 없어 네모 상자가 뜸 |
| Font Size / Auto Size | 고정 크기와 자동 축소 중 하나를 고를 때 | 번역 문자열에서 너무 작아져 가독성 붕괴 |
| Wrapping / Overflow | 줄바꿈과 잘림 방식을 정할 때 | 버튼, 대사창, 로그창이 제각각 잘림 |
| Alignment | 상자 안 정렬을 잡을 때 | RectTransform 기준과 달라 보여 위치 감각이 틀어짐 |
| Rich Text / Raycast Target | 마크업 허용, 클릭 차단 여부를 정할 때 | 외부 문자열 파싱 문제나 클릭 가로막힘 |
Text Input, Font Asset, Material Preset
텍스트 본문과 폰트 자산이 기본입니다. TextMeshProUGUI는 Canvas 기반 UI용, TextMeshPro는 월드 공간 3D 텍스트용으로 주로 씁니다. 둘 다 공통 베이스는 TMP_Text라서 코드 API는 거의 비슷합니다.
Font Asset이 바뀌면 글리프 범위, 줄간격, fallback 폰트 체인 체감이 크게 달라집니다. 현지화가 있으면 한글, 일본어, 특수문자 범위를 먼저 점검하는 편이 좋습니다.
Font Size, Auto Size, Wrapping, Overflow
Font Size를 고정할지, Auto Size로 박스 안에 맞출지 먼저 정합니다. Auto Size는 반응형 UI에 편하지만, 긴 문장과 다국어에서 글자 크기가 너무 줄어 읽기 어려워질 수 있습니다.
Wrapping과 Overflow는 텍스트가 박스 밖으로 나갈 때 어떻게 처리할지 정합니다. Ellipsis, Truncate, Overflow, Page 같은 모드는 대사창, 버튼 라벨, 로그창에서 요구가 다릅니다.
Alignment, Rich Text, Raycast
정렬은 텍스트 상자 기준이므로, RectTransform과 함께 봐야 합니다. Rich Text는 <color>, <b> 같은 마크업을 허용합니다. 디자이너가 문자열에 마크업을 직접 넣는 구조라면 켜두되, 외부 입력 문자열을 그대로 표시하는 곳은 예상 밖 파싱을 조심해야 합니다.
버튼 라벨처럼 클릭 대상이 아닌 텍스트는 Raycast Target을 꺼 두는 편이 안전합니다.
스크립트 연결
| 필드/프로퍼티 | 언제 읽거나 쓰는가 | 주의할 점 |
|---|---|---|
text | 단순 문자열 대입이 필요할 때 | 빈번한 갱신에는 할당이 늘 수 있음 |
fontSize | 강조 상태에 따라 크기를 바꿀 때 | Auto Size와 함께 쓰면 의도와 다를 수 있음 |
color | 상태별 강조, 경고, 비활성 표시 | Material Preset과 함께 최종 색이 달라질 수 있음 |
enableAutoSizing | 화면 크기/언어 길이에 맞게 자동 조절 | 최소/최대 크기를 같이 봐야 함 |
| 메서드 | 언제 쓰는가 | 연결 지점 |
|---|---|---|
SetText() | 숫자/포맷 문자열을 자주 갱신할 때 | 점수, 체력, 타이머 갱신 |
ForceMeshUpdate() | 레이아웃/문자 정보 즉시 갱신이 필요할 때 | 특수 효과, 문자 좌표 계산 |
GetRenderedValues() | 실제 렌더 크기를 읽어야 할 때 | 동적 레이아웃, 자동 크기 보정 |
using TMPro;
using UnityEngine;
public class ScoreText : MonoBehaviour
{
[SerializeField] private TMP_Text scoreLabel;
public void SetScore(int score)
{
scoreLabel.SetText("SCORE {0:N0}", score);
}
}빈번한 숫자 갱신에는 문자열 결합보다 SetText가 더 읽기 좋고 할당도 줄이기 쉽습니다.
자주 틀리는 부분
TextMeshProUGUI와TextMeshPro를 혼동해 Canvas 안에서 3D 텍스트 컴포넌트를 찾는 경우가 있습니다.- Auto Size를 켰더니 긴 번역 문자열이 너무 작아져 가독성이 무너질 수 있습니다.
- Overflow 모드를 명확히 안 잡아 대사창, 버튼, 로그창이 서로 다른 방식으로 잘릴 수 있습니다.
- Font Asset에 필요한 글리프가 없어 에디터에선 보이는데 빌드나 특정 언어에서 네모 상자가 뜰 수 있습니다.
관련 컴포넌트
Canvas, Image, Button, RectTransform, anchor, pivot, Canvas Scaler, Unity UI Toolkit vs uGUI 선택 기준
참고 링크
2 sources