크기가 고정이고 꾸밈이 없으면 일반 Text 로 충분하다
Esc

    크기가 고정이고 꾸밈이 없으면 일반 Text 로 충분하다

    –UnityUIuGUI

    Unity 에서 글자를 그리는 컴포넌트는 두 가지입니다. 예전부터 있던 Text 와, 지금 새로 만들 때 기본이 되는 TextMeshPro 입니다. 하이어라키에서 글자를 고르고 인스펙터를 보면 알 수 있습니다. Text 만 적혀 있으면 예전 것이고, TextMeshPro - Text (UI) 라고 적혀 있으면 새 쪽입니다.

    한 프로젝트 안에 둘이 섞여 있는 경우가 흔합니다. 오래된 화면은 Text 로 되어 있고 새로 만든 화면은 TextMeshPro 인 식입니다. 그래서 시안을 넘기기 전에 이 화면이 어느 쪽인지 를 알면, 시안에 적어 줄 값도 달라지고 안 되는 것을 미리 걸러낼 수 있습니다.

    둘은 글자를 만드는 방식부터 다릅니다

    폰트 텍스처 가 24 픽셀용 가 32 픽셀용 가 48 픽셀용 크게 키웠을 때 획득 그 크기로 구운 글자가 없으면 흐려집니다. 커졌다 작아지는 연출에서 특히 티가 납니다. 화면에 보일 크기마다 칸이 하나씩 더 생깁니다. 텍스처가 다시 구워지면 그 폰트를 쓰는 글자를 전부 다시 그립니다. 글자 크기를 조금씩 다르게 쓰면 그만큼 칸이 늘어납니다.
    일반 Text 는 화면에 보일 크기마다 글자를 폰트 텍스처에 채웁니다.
    폰트 텍스처 가 거리값으로 한 번 크기가 몇 가지든 이 한 장으로 그립니다. 크기를 바꿔도 텍스처는 그대로입니다. 크게 키웠을 때 획득 어느 크기로 키워도 가장자리가 그대로입니다. 외곽선과 그림자도 이 거리값으로 만듭니다. 구울 때 넣은 글자만 들어 있습니다. 없는 글자는 그때그때 채우거나 다른 폰트에서 찾아옵니다.
    TextMeshPro 는 한 번 구운 아틀라스 한 장으로 모든 크기를 그립니다.
    • 일반 Text 는 폰트 파일을 그대로 쓰고, 화면에 보일 픽셀 크기 그대로 글자를 폰트 텍스처에 그립니다. 크기 종류가 늘면 칸도 늘고, 텍스처가 다시 만들어질 때마다 그 폰트를 쓰는 글자를 전부 다시 그립니다
    • TextMeshPro 는 글자를 가장자리까지의 거리로 미리 한 번 구워 두고, 그 한 장으로 어떤 크기든 그립니다. 외곽선과 그림자도 이 거리값으로 만듭니다

    이 차이가 그대로 할 수 있는 일의 차이가 됩니다.

    일반 Text 에 있는 것과 없는 것

    Text Text 보상을 확인하세요 FontNotoSansKR Font Size24 Line Spacing1 Rich Text Horizontal OverflowWrap Vertical OverflowTruncate Best Fit Color흰색 1Line Spacing 은 배수입니다1 이 폰트가 정한 줄 높이 2가로로 넘치면줄바꿈 아니면 그냥 넘침 3세로로 넘치면잘라내기 아니면 그냥 넘침 4Best Fit 은 상자에 맞게글자 크기를 줄입니다 이 목록에 없는 것 · 자간 (글자 사이를 벌리는 값) · 말줄임 (…) 으로 끝내기 · 외곽선과 그림자 외곽선과 그림자는 컴포넌트를 따로 붙입니다
    일반 Text 의 인스펙터. 행간은 배수이고, 자간과 말줄임 칸은 아예 없습니다.

    인스펙터에서 눈여겨볼 것은 넷입니다.

    • Line Spacing 은 배수입니다. 1 이 폰트가 정한 줄 높이이고, 1.5 면 한 배 반입니다. 시안의 행간 픽셀 값을 그대로 넣으면 안 되고 원하는 줄 높이 ÷ 기본 줄 높이 로 바꿔 넣습니다
    • Horizontal Overflow 는 줄바꿈(Wrap)과 그냥 넘치기(Overflow) 둘 중 하나입니다
    • Vertical Overflow 는 잘라내기(Truncate)와 그냥 넘치기 둘 중 하나입니다. 자를 때 … 을 붙여 주는 기능이 없습니다
    • Best Fit 은 상자에 맞게 글자 크기를 줄여 주는 설정입니다. 최소와 최대를 정해 두면 그 사이에서 맞춥니다

    없는 것도 분명합니다.

    • 자간 칸이 없습니다. 글자 사이를 벌리거나 좁히는 값 자체가 없습니다
    • 말줄임이 없습니다. … 이 필요하면 코드에서 직접 문자열을 잘라야 합니다
    • 외곽선과 그림자는 컴포넌트를 따로 붙여서 만듭니다. 글자 정점을 복제해 겹쳐 그리는 방식이라 글자가 많을수록 부담이 그대로 늘어납니다
    • 글자 안에 쓸 수 있는 꾸밈 태그도 굵게, 기울임, 크기, 색 정도입니다

    폰트를 준비하는 방법도 다릅니다

    일반 Text 쪽 폰트 파일 임포트 설정 Character Dynamic Incl. Font Data 켜 둠 Font Names 폴백 폰트 목록 실행 중에 화면에 뜬 글자만 그 크기로 텍스처에 그립니다 준비 과정이 없고, 안 쓴 글자는 자리도 안 씁니다 TextMeshPro 쪽 폰트 에셋을 미리 굽습니다 글자 범위 2,350 자 아틀라스 2048 × 2048 패딩 9 구워 둔 아틀라스 한 장으로 어떤 크기든 그립니다 범위를 정하는 준비가 한 번 필요합니다 왼쪽: 웹이나 일부 콘솔은 기기 폰트를 못 써서 폰트 데이터가 항상 같이 들어갑니다. 오른쪽: 범위를 못 정하겠으면 실행 중에 채우는 설정도 있습니다.
    일반 Text 는 실행 중에 필요한 글자만 만들고, TextMeshPro 는 범위를 정해 미리 굽습니다.
    • 일반 Text 는 폰트 파일의 임포트 설정에서 Character 를 Dynamic 으로 두면, 실행 중에 화면에 뜬 글자만 그 크기로 만들어 씁니다. 준비 과정이 없고 안 쓴 글자는 자리도 차지하지 않습니다. 한글처럼 글자가 많은 언어에서 이게 꽤 편합니다
    • 대신 웹이나 일부 콘솔에서는 기기에 깔린 폰트를 쓸 수 없어서 폰트 데이터가 항상 빌드에 같이 들어갑니다. 여기서 아낄 수 있다고 계산하면 안 됩니다
    • 글자가 없을 때 대신 쓸 폰트는 임포트 설정의 Font Names 목록으로 지정합니다
    • TextMeshPro 는 쓸 글자 범위를 정해서 폰트 에셋을 한 번 굽습니다. 범위를 못 정하겠으면 실행 중에 채우는 설정도 있습니다. 굽는 값들은 TextMeshPro 는 글자를 미리 그림으로 구워 둔다에 정리해 뒀습니다

    그래서 어느 쪽을 고르나

    기준은 결국 세 가지입니다. 꾸밈이 있는가, 크기가 변하는가, 시안에 자간이나 말줄임이 있는가. 셋 다 아니면 일반 Text 로 그대로 둬도 화면은 잘 나옵니다. 하나라도 걸리면 TextMeshPro 쪽입니다.

    실제로 이런 자리에 각각 어울립니다.

    • TextMeshPro: 제목과 강조 문구, 체력이나 점수처럼 커졌다 작아지는 숫자, 외곽선이 들어간 게임 화면 글자, 자간을 맞춰야 하는 로고성 문구, 긴 이름을 … 으로 줄여야 하는 목록
    • 일반 Text: 크기가 고정된 설명 문구와 안내 문구, 개발 중에만 쓰는 표시, 이미 전부 Text 로 만들어져 있고 손댈 이유가 없는 옛 화면

    섞어 쓰면 생기는 일

    한 화면에 둘이 같이 있으면 폰트 텍스처도 두 벌 이 됩니다. 같은 폰트를 써도 일반 Text 는 픽셀 크기대로 만든 텍스처를, TextMeshPro 는 구워 둔 아틀라스를 각각 들고 있습니다. 화면을 그릴 때도 둘 사이에서 한 번 끊깁니다.

    시안 값의 뜻도 달라집니다. 행간은 한쪽이 배수이고 다른 쪽은 기본 줄 높이에 더하는 값입니다. 같은 숫자를 두 화면에 넣으면 다른 결과가 나옵니다. 그래서 프로젝트 안에서 화면 단위로 한쪽으로 통일 해 두면 서로 확인할 것이 줄어듭니다.

    옛 화면을 옮길 때

    이미 만들어진 화면을 TextMeshPro 로 바꾸는 것은 컴포넌트만 갈아 끼우면 끝나는 일이 아닙니다.

    • 행간 값을 다시 잡아야 합니다. 배수에서 더하는 값으로 기준이 바뀝니다
    • 글자가 차지하는 폭이 미묘하게 달라집니다. 줄바꿈 위치가 바뀌어서 두 줄이던 문구가 세 줄이 되기도 합니다
    • 폰트 에셋을 먼저 준비해야 합니다. 굽는 범위를 안 정하면 빈칸이 나옵니다
    • 코드에서 그 글자를 가리키고 있으면 참조가 끊깁니다. 바꾼 뒤에 화면을 열어 확인해야 합니다

    그래서 잘 돌아가는 옛 화면을 굳이 다 옮길 이유는 없습니다. 새로 만드는 화면부터 TextMeshPro 로 가고, 옛 화면은 손댈 일이 생겼을 때 같이 바꾸는 것 이 안전합니다.

    시안을 넘길 때 적어 주면 좋은 것

    항목 적어 줄 것
    어느 쪽 화면인지 일반 Text 인지 TextMeshPro 인지, 새로 만드는 화면인지
    꾸밈 외곽선, 그림자, 그라데이션이 있는지. 있으면 몇 종류인지
    크기 변화 글자가 커졌다 작아지는 연출이 있는지
    자간과 말줄임 자간 값이 있는지, 길면 … 으로 줄일지
    행간 배수 말고 원하는 줄 높이 로 적어 주면 어느 쪽이든 계산할 수 있습니다
    가장 긴 경우 이름, 숫자, 번역이 가장 길 때의 예시 문구

    정리

    • Unity 의 글자 컴포넌트는 예전 Text 와 TextMeshPro 둘입니다. 인스펙터 이름으로 구분합니다
    • 일반 Text 는 화면 픽셀 크기 그대로 글자를 만듭니다. 그 크기를 벗어나면 흐려지고, 크기 종류가 늘면 텍스처도 늘어납니다
    • 일반 Text 에는 자간과 말줄임이 없고, 행간은 더하는 값이 아니라 배수입니다. 외곽선과 그림자는 컴포넌트를 덧붙여 만듭니다
    • 폰트 준비는 반대입니다. 일반 Text 는 실행 중에 필요한 글자만 만들고, TextMeshPro 는 범위를 정해 미리 굽습니다
    • 꾸밈이 있거나, 크기가 변하거나, 자간과 말줄임이 필요하면 TextMeshPro 입니다. 셋 다 아니면 일반 Text 로도 충분합니다
    • 한 화면 안에서는 한쪽으로 통일하는 편이 낫습니다. 텍스처도 값의 뜻도 두 벌이 되기 때문입니다