유니티 게임의 한글화를 진행하다 보면
한글 SDF폰트를 넣지 않았음에도 불구하고 한글이 출력되는 경우가 있다.
이 경우 대부분 3가지 정도로 요약할 수 있다.
- 첫째. 개발사가 추후 한국어 지원을 위해 한글 SDF 폰트를 제작해서 넣어둔 경우
- 둘째. 일반 폰트(ttf/otf/ufnt 등)가 한글을 지원할 경우
- 셋째. sdf 폰트를 쓰되 ttf 폰트가 폴백폰트처럼 사용되는 경우 (Atlas Population Mode가 Dynamic인 경우)
첫번째 혹은 두번째 케이스는 그냥 대사만 번역해도 될 정도겠지만
세번째는 그냥 번역할 경우 일부 한글이 깨지는 증상이 나타나는 경우가 잦다.
1개월쯤 전에 봤던 게임 몇몇개가 세 번째 케이스였는데,
그 중 하나인 Pathlogic 2를 대상으로 문제 파악 방법과 해결법을 알아보자.
https://docs.unity3d.com/Packages/com.unity.textmeshpro@3.2/manual/FontAssetsDynamicFonts.html
위 링크를 보면, Atlas Population Mode가 Dynamic인 경우 글자를 사용할 떄 자동으로 추가되는 빈 아틀라스로 시작된다고 한다. 그래서 SDF폰트를 제작할 때 사용되었던 일반폰트에서 글자가 검색되어 오느라 어쨌건 일부만이라도 표기되는 것 같다.
게임 이름: Pathlogic 2
유니티 버전: 2018.4.6f1
한글 번역: Photis님 ( https://steamcommunity.com/sharedfiles/filedetails/?id=2533489773 )
대사를 한글로 바꾼 후, 폰트엔 손을 대지 않은 상황이다.
한글이 모두 ㅁㅁㅁ 모양으로 깨져서 나온다.
assets 파일을 열어 ttf 폰트를 교체하자.
예시는 나눔고딕으로..
완벽하게 출력되는 대사가 있으나,
그렇지 못한 대사도 있다는 것을 알 수 있다.
일부만 ㅁ으로 깨져서 나온다.
왜 이런 일이 일어나나 한번 알아보자.
UABEA로 SDF 폰트 에셋을 검색하여 Texture와 MB파일을 찾고 (위 게임에서는 NotoSans)
MB파일을 txt로 dump뜬 후 열어보면
m_AtlasPopulationMode = 1이라고 적혀있는 걸 볼 수 있다.
0이 Static, 1이 Dynamic이니까 이 경우 AtlasPopulationMode가 Dynamic으로 설정되어 있다는 것이다.
TTF 폰트를 바꿨을 때 한글이 TTF폰트에서 검색되었기에 출력된 것 같다.
안나오는 글자는 왜 안나오는진 모르겠으나,
아무튼 저 부분을 0으로 바꾼 다음 SDF폰트를 영어+특수문자+한글로 만들어서 교체해버리면
동적으로 읽어오는 것이 아닌, 정적으로 SDF 폰트에서만 글자를 검색할 것이므로 네모로 깨지는 증상이 해결 될 것이다.
아무튼 이 덤프파일에 나와있는 원본 폰트 제작정보를 이용해 임시 Unity 프로젝트에서 SDF 폰트를 만들자.
원본 폰트 제작정보는 Creation을 검색하면 아래 쭉 적혀있다.
pointsize 90
padding 9
랜더링은 그냥 제일 깔끔하고 빠른 SDFAA_hinted를 사용하기로 하였다.
* 그냥 빌드 시 오류가 떠서, 유니티 상단 메뉴 중 Window -> Package Manager에 들어가 모든 패키지를 업데이트 한 후 실행하니까 정상적으로 빌드가 되었다.
* MB파일 수정법
- 최우선적으로, 원본 폰트에서 추출한 MB파일과, 새로 만든 폰트의 MB파일을 백업해둔다.
- 나눔고딕 MB파일 m_Faceinfo 이하를 잘라내기 한 후, 원본 m_Faceinfo 이하에 덮어씌운다.
- 이후 m_PathID, m_FileID를 검색해 원본과 같이 맞춰준다. (Notepad++ 이용)
-> 이때, 추후 게임 실행시 오류가 뜬다면 구조가 조금씩 다르거나 뭔가 문제가 있는 것이므로, 확인해보자. 아마 TMPro의 버전 차이에 따른 구조 차이가 원인일 확률이 크다.
원본과 내가 만든 임시 프로젝트의 폰트 좌표파일(MB파일)의 텍스트 덤프.
오른쪽(나눔고딕)을 왼쪽(게임원본)에 적용시킨 모습이다.
잘라내기를 하였기에 오른쪽은 내용이 휑하다.
그 다음, 아까 백업해두었던 게임 폰트의 MB파일 원본을 열어
m_PathID, m_FileID를 각각 검색해 위 캡처처럼 포인터 부분을 수정해 준다.
* 게임 폰트 원본 MB파일대로 맞춰준다. 위 경우 4 -> 784로 바꾸는 식.
원본 게임엔 폰트 텍스쳐가 784번 에셋으로 들어가 있는데, 제작한 폰트에선 4번 에셋으로 들어가 있다.
그런데 우리는 게임에 있는 784번 텍스쳐를 갈아껴야 하므로, 4를 784로 수정해야 하는 것이다.
그냥 m_PathID와 m_FileID를 검색해서 눈치껏 원본 폰트를 따라가며 적절히 바꿔주면 된다.
만약 구조가 다르다면 구조도 맞춰준다.
이후 수정해준 덤프파일을 게임 assets파일에 import한 후,
실행해주면
제대로 한글이 출력되는 것을 볼 수 있다.
어차피 사용하고자 하는 글자들은 모두 SDF폰트로 제작했을 테니 폴백을 끊어도 상관없다.
만약 m_PathID, m_FileID를 맞춰주지 않거나 (특히 m_AtlasTextures 하위 m_PathID)
MB파일 구조를 맞춰주지 않는다면 게임에 오류가 뜨면서 튕기게 된다.
이 부분만 조금 주의하자.
'한글패치 관련 짧은 글들' 카테고리의 다른 글
유니티 게임 한글화 - IL2CPP 게임에서 DLL 생성 (윈도우, 안드로이드) (19) | 2021.11.28 |
---|---|
CrystalTile2의 이미지패턴 기능 <ObjH-1234 / ObjV-1324> (0) | 2021.11.01 |
인코딩 / 전-반각 관련 사이트 (0) | 2021.08.24 |
텍스트 파일 내용 교체 (csv이용) (0) | 2021.08.09 |
유니티 게임 한글화 - .bundle파일 사운드 교체 (.snd.fsb) (4) | 2021.07.19 |