한글패치 관련 짧은 글들

UABEA로 유니티 게임 폰트 교체 (일반 폰트)

Snowyegret 2022. 2. 24. 02:50

이메일로 유니티 게임의 일반 폰트 교체 문의가 와서 작성한다.

SDF 폰트는 교체를 할 수 있으나, 일반 폰트는 교체하기가 어렵다고 한다.

게임의 버전이 높아 UnityEX를 통한 교체가 어렵다고 한다.

하지만 UnityEX를 사용하지 않아도 UABEA만으로 간단하게 폰트 교체를 할 수 있다.

일단 부딪혀보고, 경험상 먹혔던 방법을 게시글로 작성하는 것이라 불필요한 과정이 많이 있을 수 있다.

 

 

예시 게임) Squirm

 

게임의 폰트이다. SquimFont 및 EMULOGIC이며, resources.assets에 들어있다.

 

UABEA에서 폰트 교체 플러그인을 업데이트 함에 따라, 폰트 교체법이 2가지가 되었다.

TTF/OTF/UFNT 폰트 모두 1번 방법과 2번 방법 모두 적용됨을 확인하였다.

또한, UnityEX로도 모든 일반폰트가 교체됨을 확인하였다.

UnityEX가 있으면 그것을 쓰되, 없다면 2번 방법보단 1번 방법을 사용하는 것을 강력하게 추천한다.

 

 

1) UABEA 플러그인을 이용한 교체

테스트용 게임의 모습이다.

기존 (2번) 방법 이후 발견하여 추가적으로 작성한 부분이므로,

Squim이 아닌 테스트용 게임을 빌드하여 시연하였다.

이 방법은 유니티 설치가 필요없다.

 

테스트용 게임에서 사용한 폰트의 설정값이다.

나눔고딕은 일반적인 형태로 import하였고, 나눔명조의 경우 ufnt 형태로 import하였다.

 

 

https://github.com/nesrak1/UABEA

위 링크에서 Latest Nightly Build를 눌러 UABEA를 다운받은 후,

폰트가 들어있는 .assets 파일을 열고,

폰트 에셋을 선택 후 Plugins - Import .ttf//otf를 누른다.

이후 변경하고 싶은 폰트를 선택하여 Import한다.

 

TTF폰트는 변경이 되었고, ufnt는 변경이 되지 않았다.

하지만, ufnt의 m_FontData 부분엔 ttf 폰트의 바이너리 데이터가 들어가 있는 상태이다.

 

 

 

문제가 되는 ufnt 에셋을 text로 dump떠보자.

15번 라인에 m_ConvertCase가 보인다.

이게 -1이면 비트맵 폰트, -2면 동적 폰트라고 한다.

(출처ㅣ https://awgsfoundry.com/blog-entry-564.html )

Texture2D를 사용하는 비트맵 폰트가 아닌, 동적 폰트로 한글을 로드해야 하므로

이를 -2로 바꿔준다.

 

 

정상적으로 바뀐 걸 볼 수 있다.

 

 

 

2) txt dump를 사용하여 교체 (비추천)

UABEA를 통해 dump를 떠보면 위 사진처럼 나온다.

일단 덮어두고 폰트용 게임을 빌드해보자.

 

 

폰트를 Project view에 드랍한다.

 

 

Add Component 클릭 후 Mesh - Text Mesh 클릭

 

 

대충 설정하고 나서 좌측 부분의 GUI Text를 더블클릭하자.

* 참고) https://docs.unity3d.com/Manual/class-TextMesh.html

 

나타났다

 

 

실행해보니 암튼 나온다.

안 나와도 상관없으니 일단 게임을 빌드하고,

이제 만든 폰트를 UABEA로 dump하자.

 

 

잘 나왔다. 근데 더럽게 길다.

어차피 Fold All 기능을 이용하여 접을 거니 상관없긴 하다.

접어보면 구조가 같다는 걸 알 수 있다.

 

 

VS Code로 열어서 선택한 부분을 원본과 교체하고, m_FontData를 제외한 부분을 원래 수치로 바꾼다.

* 3줄을 선택한 이유는 한 줄만 선택했을 경우 제대로 복사가 되지 않아서이고,

  이를 원본 수치로 다시 되돌리는 이유는 m_FontData 부분만 교체하고 싶기 때문이다.

  = 결과적으로 m_FontData부분만 교체됨

 

FontData만 교체하는 것이기 때문에 따로 PathID나 FileID를 바꿀 필요는 없다.

저장 후 Import Dump를 눌러 불러오고, save를 눌러 resource.assets 파일을 저장한 후에 원본과 교체하자.

 

 

잘 나온다.