EveryDay.DevUp

[Unity] 폰트 ( 이미지 Font, Dynamic Font ) 본문

R&D

[Unity] 폰트 ( 이미지 Font, Dynamic Font )

EveryDay.DevUp 2020. 5. 8. 18:58

Unity에서 게임을 만들 시에 텍스트를 표시할 수 있는 방법은 다양하다.

NGUI와 같은 어셋 스토어 패키지를 사용하여 텍스트를 표시할 수도 있고, 기타 다양한 어셋들을 이용할 수도 있다.

UGUI를 사용하여 Text 컴포넌트를 사용한다거나, TextMeshPro를 사용하여 텍스트를 표시할 수도 있고, 직접 텍스트를 표시할 수 있도록 구현 하는것도 가능하다.

여기서는 그 중 TextMeshPro를 사용하여 텍스트를 표시하는 방법과 기본적으로 텍스트를 표시하는 것에 대한 이론을 다루고자 한다.

▶ 사람의 글자를 디스플레이에 표시하는 방식

: 하나의 화면은 무수히 많은 Pixel이 이루어져 구성

: 이미지나 글자가 모니터에 표시되는 것은 모니터의 점을 어떤식으로 채우는냐에 달려 있음

: 폰트는 글자를 어떤식으로 채울지에 대한 규칙 ( 글자 코드와 모양을 쌍으로 묶음) 을 정해서 묶어둔 것으로, 이러한 규칙들에 따라 Font에 확장자가 달라짐

▣ 비트맵 폰트

=> 픽셀 하나에 점을 찍는 방식으로 글자의 모양에 맞추어 픽셀에 나타냄

=> 쉽게 글자를 만들 수 있지만, 글자의 확대에 의해 계단 형태로 이미지가 보일 수 있음

글자 모양에 맞추어 픽셀에 표시

▣ 아웃 라인 폰트

=> 글자는 결국 선과 선을 이어서 하나의 모양을 만드는 것이기 때문에 선의 시작점, 중간점, 끝점을 이으면 글자를 만들 수 있음

=> .ttf 폰트는 베지어 2차 곡선을 이용하고 .otf 폰트는 베지어 3차 곡선을 이용해서 글자를 표현

=> 아웃라인은 수학적 공식에 의해 글자를 표시하기 때문에 자유로운 확대/축소가 가능

( 수학적 복잡도가 낮은 .ttf 가 속도면으로 .otf 보다 빠르지만, 곡선에 대한 정밀도는 .otf가 높음 )

점과 선으로 이루어진 글자

▶ 게임에서 폰트를 어떻게 이용할 것인가.

: 폰트는 개인이 만들 수도 있지만, 가독성이 높고 이쁜 폰트를 만들기에는 전문가의 손길이 필요. 

: 게임에서 폰트를 사용하기 앞서 먼저 폰트의 라이센스 여부 체크를 체크하여 상업적으로 사용가능한지 확인이 필요함

: 대표적인 무료 폰트에는 네이버의 나눔 폰트가 있으며, 구글에서 무료 폰트를 찾을 수 있는 페이지도 존재

https://noonnu.cc/

 

상업적 이용 가능한 무료 한글 폰트 모음 사이트 눈누

상업적으로 이용할 수 있는 무료 한글 폰트를 모아 놓은 사이트 눈누

noonnu.cc

: 무료 폰트를 사용하거나 폰트를 구매하여 사용. 여기서는 쿠키런 폰트를 사용할 예정

https://www.cookierunfont.com/#section7

 

쿠키런 폰트

쿠키런 글꼴을 이제 웹에서도 즐기세요.

www.cookierunfont.com

: 참고적으로 유니티에서는 단말기에 설치되어 있는 시스템 폰트를 사용할 수 있는 API도 존재. 하지만 시스템 폰트를 사용할 경우 단말기에 따라 원하는 폰트가 없을 수도 있고 제작자의 의도와 다르게 가독성이 떨어질 수 있는 문제도 있음

다이나믹 ( dynamic ) 폰트

: 텍스트가 표시 될 때 폰트 정보에서 해당 글자들에 대한 정보를 텍스쳐에 만들어서 사용하는 방식

: TextMeshPro를 사용 예로 보여주었지만, 다이나믹 폰트의 원리는 Unity에서 동일함

: 다이나믹 폰트는 주로 채팅, 닉네임 등 사용자의 Input에 의해 글자를 표시하는 부분에 사용되게 됨

: 실시간으로 글자를 만드는 부분에 있어서 오버헤드가 일부 있으며 동적으로 생성하는 글자수가 많아져 텍스쳐의 크기가 커질 때에 처리가 필요해짐

TextMeshPro에서의 다이나믹 폰트

이미지 ( image ) 폰트

: 다이나믹 폰트가 글자를 동적으로 생성한다고 하면 이미지 폰트는 미리 사용할 글자들을 텍스쳐에 만들어서 사용하는 것

: 게임에서 사용할 텍스트만으로 만들기 때문에 텍스쳐의 크기를 최적화해서 사용할 수 있음

: 정해진 글자에 따라 폰트 텍스쳐를 직접 만들어 사용할 수 있기 때문에 게임 분위기에 맞고 가독성이 높게 만들 수도 있음

미리 정의한 텍스트를 기준으로 텍스쳐를 생성
숫자 이미지 텍스쳐
숫자 이미지를 분리하고 인덱스를 만들어서 텍스트에 사용할 수 있도록 함