한글패치 관련 짧은 글

유니티 게임 SDF 폰트 변경 (폴백 폰트 연결의 경우)

눈백로 2021. 10. 11. 14:44

유니티 게임의 한글화를 진행하다 보면

한글 SDF폰트를 넣지 않았음에도 불구하고 한글이 출력되는 경우가 있다.

 

이 경우 대부분 3가지 정도로 요약할 수 있다.

- 첫째. 개발사가 추후 한국어 지원을 위해 한글 SDF 폰트를 제작해서 넣어둔 경우

- 둘째. CJK(중국, 일본, 한국어) 지원을 위해 때려박아 버린 경우

- 셋째. ttf/ufnt폰트를 사용하거나, sdf 폰트를 쓰되 ttf 폰트를 폴백으로 잡은 경우

 

첫번째 혹은 두번째 케이스는 그냥 대사만 번역해도 될 정도겠지만

세번째는 그냥 번역할 경우 일부 한글이 깨지는 증상이 나타나는 경우가 잦다.

또한, 

1개월쯤 전에 봤던 게임 몇몇개가 그랬는데, 그 중 하나인 Pathlogic 2를 대상으로

폴백 폰트 연결이 대충 어떤 식으로 되어있으며, 문제를 어떻게 해결하는지 알아보자.

 

게임 이름: Pathlogic 2

유니티 버전: 2018.4.6f1

한글 번역: Photis님 ( https://steamcommunity.com/sharedfiles/filedetails/?id=2533489773 )

 

대사를 한글로 바꾼 후, 폰트엔 손을 대지 않은 상황이다.

한글이 모두 깨져서 나온다.

 

 

assets 파일을 열어 ttf 폰트를 교체하자.

예시는 나눔고딕으로..

 

 

완벽하게 출력되는 대사가 있으나,

그렇지 못한 대사도 있다는 것을 알 수 있다.

 

본 게임은 SDF폰트를 사용하며, 폴백폰트 또한 사용하고 있다.

폴백폰트를 사용하고 있다는 사실을 어떻게 아느냐? 

 

 

UABEA로 SDF 폰트 에셋을 검색하여 Texture와 MB파일을 찾고 (위 게임에서는 NotoSans)

MB파일을 txt로 dump뜬 후 열어보면

 

 

m_AtlasPopulationMode = 1이라고 적혀있는 걸 볼 수 있다.

이게 폴백 관련인지, 1이 되어있으면 항상 폴백폰트 연결이 된 상태였다.

아무튼 이 덤프파일에 나와있는 원본 폰트 제작정보를 이용해 임시 Unity 프로젝트에서 SDF 폰트를 만들자.

원본 폰트 제작정보는 Creation을 검색하면 아래 쭉 적혀있다.

 

 

pointsize 90

padding 9

랜더링은 그냥 제일 깔끔하고 빠른 SDFAA_hinted를 사용하기로 하였다.

* 그냥 빌드 시 오류가 떠서, 유니티 상단 메뉴 중 Window -> Package Manager에 들어가 모든 패키지를 업데이트 한 후 실행하니까 정상적으로 빌드가 되었다.

 

 

* MB파일 수정법

- 나눔고딕 MB파일 m_Faceinfo 이하를 잘라내기 한 후, 원본 m_Faceinfo 이하에 덮어씌운다.

- 이후 GUID, m_PathID, m_FileID를 검색해 원본과 같이 맞춰준다. (Notepad++ 이용)

-> 이때, 추후 게임 실행시 오류가 뜬다면 구조가 조금씩 다르거나 뭔가 문제가 있는 것이므로, 확인해보자.

원본과 내가 만든 임시 프로젝트의 폰트 좌표파일(MB파일)의 텍스트 덤프.

오른쪽(나눔고딕)을 왼쪽(게임원본)에 적용시킨 모습이다.

잘라내기를 하였기에 오른쪽은 내용이 휑하다.

 

 

잘라내기-붙여넣기 작업을 한 후, GUID, m_PathID, m_FileID를 각각 검색해

사진처럼 다른 부분을 수정해 준다.

구조가 다르다면 구조도 맞춰준다.

이후 수정해준 덤프파일을 게임 assets파일에 import한 후,

실행해주면?

 

제대로 한글이 출력되는 것을 볼 수 있다.

 

 

 

만약 GUID, m_PathID, m_FileID를 맞춰주지 않거나 (특히 m_AtlasTextures 하위 m_PathID)

MB파일 구조를 맞춰주지 않는다면 

게임에 오류가 뜨면서 튕기게 된다.

Fallback으로 잡혀있는 파일의 PathID가 기입되지 않거나 다른 거로 지정되어 있어서 그런 것 같다.

이땐 앞서 말했던 m_AtlasPopulationMode = 1 부분을 m_AtlasPopulationMode = 0으로 바꾸면

폴백 연결이 끊어지게 되어 오류 없이 실행이 된다.

어차피 사용하고자 하는 글자들은 모두 SDF폰트로 제작했을 테니 폴백을 끊어도 상관없다.

 

하지만 폴백을 끊으면 안 되는 케이스가 있는데,

바로 특정 문자(ex. 숫자)의 표기를 유지시키고 싶은 경우이다.

숫자까지 SDF 폰트로 제작해버리니 기존 폰트 대비 너무 사이즈가 늘어나 UI를 벗어난다 싶으면

- MB파일을 수정하여 SDF폰트가 사용될 때의 사이즈 자체를 줄여버리거나

- SDF폰트 제작시 숫자를 포함시키지 않고 제작을 한 후 fallback 폰트를 잡아버리면

숫자는 원본 폰트로, 한글 및 기타 문자들은 SDF 폰트로 나오게 되어 해당 문제를 해결할 수 있다.