• 티스토리 홈
  • 프로필사진
    SiJun-Park
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
SiJun-Park
  • 프로필사진
    SiJun-Park
    • 분류 전체보기 (190)
      • Unity (148)
        • 출시 해보기 (Slime Company) (3)
        • 뱀서류 Project (34)
        • Defense Project (20)
        • FPS Project (30)
        • RPG Project (39)
        • 기타 - 개발 (22)
      • 개발 (35)
        • 임베디드 소프트웨어 (7)
        • 컴파일러 (6)
        • 기계학습 (8)
        • 보안 (8)
        • 그래픽스 (2)
        • 그 외 (4)
      • 코딩문제 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 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
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바