몰랐던 것들 수업시간에 대략적으로 복붙도하고 정리
3/17부터 팀프로젝트 시작해서 스터디도 단순히 문제를 푸는식으로 바뀌었다.
window -> text mesh pro -> font asset creator
======================
예전부터 사용해왔던 UI의 Text는 이제 Legacy로 빠진 상태입니다.
유니티에서 주력으로 추천하고 있는 Text는 TextMesh Pro (줄여서 TMP) 에요.
하지만 한글 폰트 문제로 진입 장벽이 있음을 느낄 수 있습니다.
그래서 이번 시간은 TMP의 한글 폰트 에셋 제작하기 내용을 준비했고,
평소에 폰트 에셋 문제로 거들떠보지 않았던 TMP를 이 기회를 삼아서 적극 활용해보면 어떨까 합니다.
---------------------------------------------------------------
1. TMP 시작하기
하이어라키에서 UI > Text - TextMesh Pro를 클릭하면 자동으로 TMP가 시작됩니다.
다만 이것도 패키지가 따로 있던 것이므로 설치 작업이 필요합니다.
TMP 오브젝트를 생성하면 자동으로 나타나는 Impoter 창에서
Import TMP Essentials를 눌러 설치해줍니다.
설치 이후 TMP만 가지고 원하는 위치와 모양을 잡아줍니다.
하지만 여기서 한글로 작성하면 위와 같이 네모 모양으로 폰트가 깨지는 문제를 볼 수 있습니다.
흔히 사용자 한글 패치를 진행한 영문 게임의 모습과도 같은데요.
왜 이런 문제가 발생한건지 폰트 에셋을 살펴봅시다.
TMP 기본 패키지에서 제공하는 폰트 에셋은 LiberationSans 인데요.
폰트 에셋을 펼치면 아틀라스가 들어있는데, TMP는 이렇게 텍스트를 아틀라스를 활용하고 있답니다.
보아하니 영문과 숫자, 특수문자만 있고 한글이 아예 없는 상태입니다.
때문에 한글이 나오지 않는 것이고 우리는 새로운 폰트 에셋을 만들어야겠습니다.
우리가 알고 있는 폰트 파일은 어디서 구할 수 있을까요?
우리나라에는 "눈누 폰트"라는 폰트 공유 사이트가 있습니다.
눈누
상업용 무료한글폰트 사이트
noonnu.cc
여기서 원하는 스타일의 폰트를 선택하고 라이선스를 확인한 다음
다운로드 받으면 됩니다.
라이선스 중에서 특히 임베딩 부분이 허가되는지 확인하셔야 합니다.
폰트마다 라이선스가 다르니 잊지말고 살펴봐주세요.
다운로드 받은 폰트를 유니티 프로젝트 안에 넣어두고
본격적으로 TMP를 위한 폰트 에셋을 만들어봅시다.
만약 픽셀아트 스타일의 폰트라면 위 사진처럼 추가 설정합니다.
Window > TextMeshPro > Font Asset Creator 메뉴를 클릭하면
아래와 같이 Font Creator 창이 나타나요.
이 창에서 다이나믹 타입 폰트 에셋을 기반으로 하여 아틀라스 타입 폰트 에셋을 제작할 겁니다.
우선 기본적인 설정부터 진행해보도록 합시다.
먼저 토대가 될 Source Font를 다운로드 받은 폰트로 지정합니다.
아래의 속성들은 일단 기본 값 (Size 60, Padding 4px, Method Fast, Resolution 4K)은 그대로 둡니다.
한글 폰트 에셋 만들 때 가장 중요한 부분! Character Set 입니다.
기본 값은 ASCII로 되어있는데 이렇게 하면 숫자와 영문자 정도만 들어가게 됩니다.
Character Set을 Custom Range로 하고 새롭게 생긴 Charactger Sequence 부분을 아래와 같이 명시해줍니다.
32-126,44032-55203,12593-12643,8200-9900
크게 4가지 카테고리로 영역이 있으며 해당 내용은 아래와 같습니다.
영어 범위 : 32-126
한글 범위 : 44032-55203
한글 자모 : 12593-12643
특수 문자 : 8200-9900
모두 설정했다면 아래의 Generate Font Atlas 버튼을 눌러 아틀라스를 생성하고
여백이 모자란지, 빠진 문자가 있는지 확인합니다.
원본 폰트에서 지원하지 않는 문자는 생성될 수 없으며 Missing characters로 나타납니다.
마지막으로 아래의 Save 버튼으로 폰트 에셋을 만들면 끝!
이렇게 TMP Font Creator으로 제작된 에셋은 파란색F 아이콘으로 표시됩니다.
이렇게 만든 한글 폰트에셋을 장면에 적용해봅니다.
한글도 적어보고 다양한 모양을 시도해보세요.
=======================================
legacy는 이미지기반 렌더링방식이라 픽셀단위로 표현되고
TMP 는 sdf방식으로 글자나 모양의 윤곽선을 수학적으로 표현하는 방법으로 거리데이터(픽셀에서부터 글자윤곽까지의 거리)로 저장하는 방식이라 글자 윤곽선을 정확히 표현할수있고 독립적으로 렌더링 가능하다고하네요
최적화 적인 면에서도
legacy는 폰트를 비트맵 이미지로 저장해서 고해상도나 다양한 문자 지원시 드로우콜이 급격히 늘어나고
TMP는 여러개의 텍스트 오브젝트를 하나의 배치로 묶어서 드로우콜을 최소화 합니다
예
Legacy Text로 100개의 텍스트를 만들면 100번의 드로우 콜 발생 가능.
TextMeshPro로 동일 폰트와 스타일을 가진 100개의 텍스트를 만들면 1번의 드로우 콜 로 처리될 수 있습니다.
==============================
드로우 콜 이야기가 나와서 저번에 본 영상이 기억나서 정리해봐야겠다
https://www.youtube.com/watch?v=w14yjBlfNeQ
// 생성자에서 프리팹과 초기 크기를 받아 풀을 초기화합니다.
// 초기 크기만큼 오브젝트를 생성하여 풀에 추가합니다.
// 새로운 오브젝트를 생성하여 풀에 추가:
// CreateNewObject 메서드는 새로운 오브젝트를 생성하고 비활성화 상태로 풀에 추가합니다.
// 풀에서 사용 가능한 오브젝트를 가져오기:
// Get 메서드는 풀에서 사용 가능한 오브젝트를 가져옵니다.
// 풀이 비어있으면 새로운 오브젝트를 생성합니다.
// 가져온 오브젝트를 활성화 상태로 반환합니다.
// 사용이 끝난 오브젝트를 풀로 반환:
// Return 메서드는 사용이 끝난 오브젝트를 비활성화 상태로 풀에 반환합니다.
// 이 클래스는 오브젝트 풀링을 통해 오브젝트 생성과 파괴에 따른 성능 저하를 줄이고, 메모리 관리를 효율적으로 할 수 있도록 도와줍니다.