[libGDX] libGDX에서 한글 폰트 사용하기

TTF 폰트 파일을 이용하여 런타임에 바로 폰트를 생성하고 싶다면 다음 링크를 참조해 주세요. -> LibGDX에서 freetype-font 사용하기


LibGDX에서 게임을 만들다 보면 한번쯤 생각하게 되는것은 폰트이다. LibGDX 에서 폰트를 보여줄 수 있는 방법은 두가지가 있다. 주로 쓰는 방식은 BitmapFont를 직접 불러와서 폰트를 나타내는 방법이고 하나는 LibGDX Extension에 있는 gdx-stb-truetype를 이용하여 트루타입 폰트를 BitmapFont로 바꾸어 나타내는 방식이다. 후자에 대한 방법은 (http://stackoverflow.com/questions/9486446/truetype-fonts-in-libgdx)를 참고하기 바란다.

LibGDX에서는 BitmapFont 제작 툴인 Hiero를 배포하고 있다.(http://code.google.com/p/libgdx/wiki/Hiero) 이 툴을 이용하면 원하는 폰트를 쉽게 만들 수 있다.

다음은 Hiero 실행 화면이다. 좌측에서는 원하는 글꼴을 선택할 수 있고, 중앙에는 출력할 글자들을 써 넣을 수 있다. 오른쪽에는 글자 효과들을 조정할 수 있다. 효과들을 잘 조절 하기면 하면 예쁜 폰트를 만들어 낼 수 있다.


그러면 잠시 예술 혼을 발휘해서 나름 예뻐 보이는 폰트를 만들어 보도록 하겠다.

몇 가지 참고를 하자면 Font가 렌더링 될때는 Effect가 위에서 부터 적용되기 시작된다. 즉, Shadow 효과가 Color 아래쪽에 있으면 그림자같은 효과가 나오지 않게 된다. 그리고 Color와 Gradient 같이 쓰게 되면 폰트가 약간 일그러져 안 예뻐 보일 수도 있다. 몇번 하다보면 알게 될 것이다.

이렇게 만들어진 폰트를 왼쪽 상단의 File를 눌러 hiero파일로 저장 할 수 있고, BitmapFont 파일로 export할 수 있다. 하지만 처음 상태로 export를 하게 되면 영어만 BitmapFont로 만들어 졌기 때문에 한글출력이 되지 않을 것이다. SampleText에 한글을 추가해 주자. 한글의 모든 글자를 추가해야 한다. 추가할 한글 글자들은 첨부된 euc-kr.txt 파일에 있는 글자들을 복붙하면 될 것이다.

euc-kr.txt

그리고 한가지 더 주의해야 할 것이 있다. 글자가 렌더링되는 부분에 Glyph cache라는 것이 보일 것이다. 여기서는 export될 png파일의 크기를 지정해 줄 수 있다. LibGDX에서 BitmapFont 파일을 불러와서 사용했을때 문제가 되는 부분은 png파일이 여러개일 경우였다. png크기를 최대로 지정해서 한 페이지를 넘어가지 않도록 해야 한다.

이제 BitmapFont 파일로 export 해주자.

이제 이렇게 만들어진 BitmapFont 파일을 LibGDX에서 사용하면 예쁘게 한글 폰트가 출력되는 것을 확인할 수 있다.

 

이제 예쁜 한글 폰트를 사용할 수 있게 되었다! LibGDX 만세!


FreeType Font를 사용할 수 있는 방법을 새로 포스팅 하였다. ttf나 otf폰트 등을 이용하고 싶으면 링크를 확인해 보기 바란다.

LibGDX에서 freetype-font 사용하기

저작자 표시
신고
  • Favicon of http://onsemy.wo.tc 온새미 주소 수정/제거 답글달기 2012.10.19 00:56 신고

    소중한 자료 감사합니다! libGDX같은 애들은 국문 팁이 없어서 초반에 고생 많이 했던 기억이 나네요..ㅎㅎ
    궁금한게 있는데 위에 링크 걸어주신 TTF 타입의 폰트로 한글을 표현하려고 하면 string에 euc-kr.txt의 내용을 삽입하면 될까요?
    그...그런데 되더라도 부담이 클 것 같긴 하네요 ㅎㅎ;

    P.S 블로그 이쁘네요 +_+

  • 윤인하 주소 수정/제거 답글달기 2012.11.22 16:02 신고

    정말 많은 도움 되었습니다. 감사합니다. 추가적으로 질문드리고 싶은게 있는데, 폰트생성까지 한 후 fnt파일과 PNG 파일 두개가 생성되었는데, 이것을 gdx에 어떻게 적용 가능한지 여쭈어보고 싶습니다.
    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("data/font.ttf")); 라고 이런 구문을 이용하여 폰트제너레이터 인스턴스를 생성하려고 하는데, 폰트의 확장자를 fnt로 하면 읽지를 못하네요. 폰트생성파일 두개는 모두 asset의 data 폴더에 집어넣었습니다.(물론 jar파일들은 메인소스의 libs폴더에 넣은 후 빌드패츠에 등록했습니다.)
    또 링크걸어주신 해외포럼의 True type font 함수를 써보면 이상하게 인식을 못하네요. 자동완성에도 뭘 import하라고 하는지도 없고, 클래스생성하라는것만 나옵니다...
    다시한번 좋은 정보 감사드립니다. 행복하세요.

    • 윤인하 주소 수정/제거 2012.11.22 19:44 신고

      아. 해결했습니다. freetypefontgenerator 안쓰고 그냥 엔진에서 제공하는 bitmapfont 클래스를 사용하면 되는군요.ㅎ;;

    • Favicon of http://edoli.tistory.com 소리미아 에돌이 주소 수정/제거 2012.11.22 23:23 신고

      해결책을 찾아서 다행이네요.ㅎㅎ;
      참고로 True Type Font를 직접 사용하시려면 libgdx 폴더에 보면 extensions 폴더가 있는데, 그 안에 gdx-freetype, gdx-freetype-native라는 jar 파일들이 있습니다. 이 파일들을 libs에 추가해 주셔야 True Type Font 관련 클래스를 사용하실 수 있습니다.

    • Favicon of http://pugda.tistory.com Pug 주소 수정/제거 2013.11.28 02:09 신고

      저도 이 문제 때문에 한글 폰트 안되서 포기했었는데.. ㅠㅠ 여기 답변이 있었네요

    • Favicon of http://edoli.tistory.com 소리미아 에돌이 주소 수정/제거 2013.11.28 22:39 신고

      FreeType font에 관한 내용은 따로 블로깅을 했습니다.
      http://edoli.tistory.com/85

  • 우왕 주소 수정/제거 답글달기 2015.10.29 23:38 신고

    너무 감사합니다 ㅎㅎㅎㅎ

비밀 댓글