- Text와 TextMeshPro 공부2025년 12월 20일
- SiJun-Park
- 작성자
- 2025.12.20.:40
이번에는 평소에 자주 쓰지만 깊이 들여보지 않은 것을 학습을 제대로 하기 위해서 공부를 하였습니다.
둘의 차이는 레거시 UI 텍스트와 고품질 텍스트 시스템입니다.
TEXT
- 비트맵 기반 레더링
- 현재는 사실상 레거시로 많이 사용
장점
- 설정이 거의 없음
- 빠르게 테스트용으론 편함
단점
- 글자가 잘 깨짐 => 스케일 조정 시 픽셀 깨짐이 발생
- 커스터마이징의 한계가 있음
- Rich Text 기능 제한적
- 성능과 품질이 둘 다 애매해서 모바일 / PC 대응 시 불리함
TextMeshPro(TMP)
- SDF (Signed Distance Field) 기반 텍스트
장점
- 확대 / 축소해도 글자가 안 깨짐, 해상도가 독립적
- 커스터마이징이 강력함
- 대량 텍스트에도 효율적이며 모바일에서도 안정적
- 기능이 많음, 예로 들어서 Link, 스프라이트 삽입, Rich text의 다양한 태그, 폰트 에셋 관리
단점
- 폰트 에셋 생성이 필요한 초기 설정 귀찮음이 있음
- 단순한 텍스트 하나 찍는 용도엔 과함
GC의 차이
Text.text = "HP: " + hp;일반적으로 텍스트를 만들 때 위와 같이 많이 사용하는데
이 경우는 내부적으로 새 string을 매번 생성합니다.
그래서 프레임마다 갱신을 하면 매 프레임 할당 발생해서 GC 스파이크가 일어납니다.
또한, 텍스트가 바뀌게 되면 UI가 다시 그릴 준비를 합니다.
특히 유니티 UI Text는 텍스트가 바뀌면 보통 글자 메쉬 재생성, 레이아웃/캔버스 리빌드 유발 가능합니다.
즉, 문자열 할당 + UI 리빌드 비용이 같이 올 수 있습니다.
그러면 뭐가 다른 방법이 있나?
그래서 TMP에서 최적화 포인트는 string을 매번 새로 만들지 말자입니다.
tmp.SetText("HP: {0}", hp);위와 같이 SetText를 사용하면 뭐가 달라지냐면, TMP 내부에 캐시/버퍼 기반 포맷팅 경로가 있어서 특정 케이스에 유리합니다.
단, 무조건 GC 0을 보장한다는 것은 아닙니다.
또헌, 당연히 TMP도 내용이 바뀌면 어느 정도 리빌드가 생깁니다.
하지만 이제 Fixed Size 박스, auto-size 옵션 관리와 같은 것들로 레이아웃 튐을 줄이기 쉬운 편입니다.
ex) 999 => 1000이 될 때 폭이 바뀌면 레이아웃 리빌드/재배치 비용이 튀기 쉬움
그러면 둘 다 단점이 있는데 왜 TMP를 선호하나?
Text는 문자열 만드는 방식을 개발자가 실수하기 쉬운 구조입니다.
TMP는 실무에서 흔한 패턴을 GC 덜 나게 쓰라고 도구를 제공한다는 것입니다.
'Unity > 기타 - 개발' 카테고리의 다른 글
Coroutine 공부 기록 (0) 2025.12.30 Heap과 Stack에 대해 공부 (0) 2025.12.21 Playfab 닉네임 동기화 문제 (0) 2025.07.04 코드 파일 클릭 시 sin 연동 안됨 문제 (0) 2025.04.28 flood-fill algorithm을 활용한 미로맵 만들기 - 2 (0) 2025.03.28 다음글이전글이전 글이 없습니다.댓글