NGUI 개발시에는 한글 폰트를 FontMaker로 구워서 넣고 썼었는데요.
uGUI 쓰면서는 유니티에서 제공하는 TMP(TextProMesh)와 TMP Font Maker 로 작업하고 있습니다.
TMP Font Maker를 쓰면 TTF, OTF로 깔끔하게 출력할 수 있다고 해서요.
언제나처럼 폰트 세부 내용에 대해 충분히 공부하지 않고 구현부터 들어갑니다. (-_- 이래서 하수를 못 벗어납니다)
TMP Font Maker 한글 폰트 구현에 대한 글들은 구글링해서 많이 나오네요.
그 중에서 제일 먼저 나오기도 하고, 꾸준히 업데이트하면서 팁들을 알려주는 포스트입니다.
https://m.blog.naver.com/cdw0424/221641217203
위 글을 보며 따라 구현하니까 OTF로 Font Asset을 만들어 출력하는 것까지는 잘 되었는데요.
폰트 생성 후 개발하면서 한동안은 잘 출력되다가 어느정도 시간이 지나면 한글 폰트가 깨져 보이기 시작하더라구요.
처음에는 OTF 폰트 문제인가 해서 다른 폰트로 바꿔봤는데... 바꾸고 나서 바로는 괜찮더니 또 시간이 지나면 깨짐 현상이 나타납니다. ㅠㅠ
이래저래 씨름하다보니 대략적인 원인을 찾았고, 다행히 해결은 했습니다.
[현상]
TMP Font Maker로 한글 폰트용 Font Asset을 만들고 사용하다가 한글 깨짐( ☐☐☐ )현상 발생
폰트 적용후 일정 시간동안은 잘 나옴. 어느정도 시간이 지나면 새로 출력하는 글자들만 깨짐
[문제 해결 과정]
- 다른 OTF 폰트로 Font Asset을 만들고 적용 - 마찬가지로 한동안 괜찮다가 좀 지나면 깨짐 (지겨운 ☐☐☐)
- TextMeshPro Font Maker로 구울 때 Dynamic 말고 Static으로 구움 - 해결됨 (하지만 좀 더 살펴보기로 함)
- Font Asset 아래에 Atlas Material과 Atlas가 들어 있음
- 새로운 폰트 적용 후, Font Asset의 Atlas를 살펴봄
- 출력되는 글자들이 Atals에 실시간 추가 등록됨 (Dynamic 동작 확인)
- Atlas를 글자가 꽉 채우면 새로운 글자들이 들어가지 못함, 새로운 글자들은 ☐로 출력됨 (유레카!!!)
- Font Asset을 클릭하고 Inspector창에서 Generation Setting > Atlas Width/Height을 늘림 (1024 -> 2048)
- 늘어난 만큼 글자들이 더 들어감
- 혹시 2048 Atlas도 꽉 차면 멈출까봐서 Multi Atals Textures 옵션도 체크해서 활성화 시킴
[알게 된 내용]
- Dynamic Font가 만능은 아님: 한정된 글자 수로 제한되어 보여지는 UI등에는 좋을 것 같지만, 일반 대화창이나 글자 수가 많아지는 텍스트에는 부적합할 것 같다
- Static으로 구우면 고민 안해도 됨 (장단점은 미리 확인하고 결정)
이틀동안 짬짬이 고민했으니, 해결까지 대략 3~4시간 정도 소모했네요.
아직도 물음표인 내용이 많은데 또 확인하려면 시간이 들어가니... 일단 여기서 덮고 본 개발로 돌아갑니다.
? 개발자 Editor에서 플레이, 테스트하며 생성된(구워진) Atlas가 빌드시 그대로 들어가는건가? 개발 에디터와는 상관 없는건가?
? Dynamic Font 적용시, 실시간으로 구워지는 Atals가 휴대폰에 남아있는가? 아니면 실행시마다 Atlas가 초기화되는가?
? Multi Atlas Textures Dynamic 옵션을 체크해서 활성화했을 때, 단점 혹은 부작용이 있는건가?
멀티 아틀라스 안써도 될겁니다.
project\Library\PackageCache\ 경로에 보시면 tmp 소스코드 볼 수 있습니다.
참고하세요.