그냥 흥미를 가지고 글을 읽으시는 분들은 2편부터 읽으셔도 됩니다.

 

하지만 혹시라도 여기서 무언가 쓸모 있는 내용을 찾고 계신다면, 1편을 보고 오시는 것을 추천드립니다. 별 내용은 없지만, 앞으로 다루는 거의 모든 프로그램들에 대한 설명이 적혀 있고, 특히 이 내용들을 전부 어디서 배웠는지 적혀 있습니다. 

 

이미 보고 오셨다면 감사드립니다. 시작하기 전에, 주의사항을 하나 말씀드리겠습니다. 이 글은 아무 것도 모르는 제가 어떻게 시행착오를 거치며 한글화에 성공했는지에 대한 기록 같은 것이지, 한글화를 하는 방법에 대한 강좌가 아닙니다. 제가 한 방법이 무조건 맞는 것이 아니며, 어떤 측면에서는 엄청나게 멍청한 방법일 수도 있습니다. 저는 단지 기록을 남기기 위함으로 이 글을 적고 있음을 다시 한번 알려드리는 바입니다. 저는 한글화나 유니티 게임의 전문가가 아니며, 제가 한 모든 것은 검색을 통해 배운 것입니다!

 


 

저는 한글 출력에는 성공했지만, 폰트가 지나치게 작은 상태였습니다. 저는 다시 검색을 시작했지만, 쓸모 있는 내용은 찾지 못했습니다. 그래서 다시, 카페에 질문을 했고... 엄청난 도움들을 받을 수 있었습니다. 이 내용이 앞서 1편에서 김작님의 유니티 한글화 강좌에 대해 말씀드린 내용인데요, 사실 SDF 폰트 파일을 바꿔치기 하기 위해서는 굳이 HxD를 이용해서 헥스값을 바꾸지 않아도 됩니다. UABE를 이용해서, 훨씬 더 쉽고 간편하게 한글 패치를 할 수 있었습니다.

 

앞으로의 내용은, 제가 해당 방법으로 한글 패치 하는 과정을 그대로 적으려고 합니다. 이 방법이 반드시 맞는 것은 아닙니다!

 

먼저, 해당 게임의 Data 폴더를 찾습니다. 스팀을 통해서 설치한 게임이라면, 해당 게임의 설치 경로로 가시면 됩니다. 게임 우클릭 - 속성 - 로컬 파일 - 찾아보기 를 하면 해당 게임의 설치 경로로 이동하실 수 있습니다.

 

해당 폴더로 이동하셨다면, sharedassets 파일들을 찾습니다. 

 

 

이 중 sharedassets2 파일을 이제 UABE를 이용하여 열어 보겠습니다. 

 

 

 

저는 다른 방법 등을 통해서 이 sharedassets2 파일 안에 dialog.txt 파일이 있다는 것을 알아낸 상태였습니다. 다른 게임의 경우 이 안에 파일이 없을 수도 있고, 있다 해도 txt 형식이 아닐 수 있습니다. 

 

 

팁을 알려드리자면, 상단의 Type을 누르면 파일의 타입에 따라 정렬할 수 있습니다. 이걸 통해서, TextAsset 파일만 모아서 볼 수 있습니다. 

 

 

dialog를 선택하고, Plugins를 누르면 위와 같은 창이 뜹니다. Export to txt를 누르면 해당 파일을 txt 파일로 뽑아낼 수 있게 됩니다. 

 

 

이제 이걸 번역하면 됩니다. 파일을 자세히 보시면 아시겠지만, 같은 내용의 대사가 영어, 독일어, 프랑스어, 스웨덴어 등으로 이어지고 있습니다. 저는 일본어 패치 파일도 뜯어 봤었는데요, 그 결과 그냥 영어 부분만 남기고 나머지는 전부 삭제해도 별 상관 없다는 것을 알 수 있었습니다. 따라서, 다음 할 일은 이 TXT 파일을 엑셀을 통해 보기 쉽게 만드는 것이었습니다. 엑셀의 강력한 여러 기능을 사용하여, 쉽게 해 낼 수 있었습니다. 텍스트 나누기 기능과, left, right 함수를 이용하여 저는 영어 부분만 빼낼 수 있었습니다.

 

1차적으로 뽑아낸 대사들, 이걸 더 가공해서 대사만 뽑아 썼습니다.

 

여기서 영어 부분만 따로 추출한 다음, 초벌 번역을 돌렸습니다. 파파고를 이용하여 엑셀 자동번역을 할 수도 있지만 하루에 1만 자 제한이 있습니다. 구글 번역을 사용하셔도 됩니다. 어차피 제 목적은 대충 직관적으로 내용을 추측할 수 있는 수준의 번역이었습니다. 그래서 번역기를 이용해 초벌번역하고, 옆에 원문을 보면서 번역을 해 나갔습니다. 

 

검수를 위해 가공된 대사들

그리고, 검수가 필요하므로 대사 앞에 번호를 남겼습니다. 모든 대사에는 entryX라는 이름이 붙어 있었는데요, 이걸 이용해서 모든 대사 파일들 앞에 해당하는 대사를 붙였습니다. 나중에 실제 패치를 만들 때에는 당연히 삭제했습니다. 이제 대사 파일이 준비됐으니, 폰트 파일을 만들 차례입니다. 다운받은 유니티 구버전을 실행시키고, 필요한 textmesh pro도 설치해 줍니다. 제대로 설치됐다면, 상단 메뉴의 window를 눌러 textmesh pro - pont asset creater를 실행시킬 수 있습니다. 

 

 

뭔가 하기 전에, 먼저 해당 유니티 프로젝트가 저장되어 있는 폴더를 엽니다. 그리고 assets - textmesh pro - fonts 로 들어가면, textmesh pro에서 사용하는 폰트들이 들어 있습니다. 우리는 한글 폰트를 만들어야 하므로, 여기에다가 원하는 폰트 파일을 집어넣습니다. 그리고 나서 다시 유니티로 돌아와서, font source로 사용할 폰트를 지정합니다.

 

 

폰트 이미지 파일의 크기 ( atlas resolution )은 저는 8192X8192로 했습니다. 어쩌다 보니 그렇게 됐습니다. 그 뒤, character set을 정해 줘야 하는데요, 쉽게 말해 폰트 예시를 넣어 주는 것입니다. 알파벳의 경우에는 몇 자 안 되지만, 한글의 경우 그 수가 무궁무진 합니다. 그래서, 현대 한글에서 주로 쓰이는 문자가 정리되어 있습니다. 완성형 한글 2350자 라고 검색하시면 금방 찾으실 수 있습니다. 또는, 본인 게임에서 쓰이는 모든 글자만 모아서 정리해도 상관없다고 생각합니다. 거기에 영어, 숫자나 기호까지 포함된 것을 찾으시면 됩니다. 여기에는 제가 썼던 것을 올려두겠습니다. 저는 게임에 — 문자를 사용했는데요, 이 문자가 제가 받았던 파일에 없어서 추가했습니다. 그 외에는 영어 대소문자, 기호, 숫자와 한글 2350자가 담겨 있습니다. 

 

한글2350자_수정.txt
0.00MB

 

charactor set을 Custom Characters로 바꾸면 글자를 입력할 수 있는 칸이 하단에 생깁니다. 글자 모음을 복사하여 붙여넣으면 됩니다. 약간의 시간이 걸린 뒤, 폰트 파일이 생성됩니다. 하단의 save textmesh pro font asset을 눌러 저장합니다. 그 뒤 왼쪽의 main camera가 있는 곳에서 우클릭 - UI - textmesh pro text를 클릭합니다. 

 

 

그러면 이런 창이 뜹니다. 오른쪽의 new text를 한글 문자 아무거나로 수정합니다. 

 

 

이렇게 됩니다. 괜찮습니다. 당연한 겁니다. 왜냐면, 우리가 만든 한글 폰트를 적용시키기 않았기 때문입니다. 글을 적은 곳 밑에 보면 font asset을 변경할 수 있습니다. 방금 만든 걸로 변경하면... 

 

 

이렇게 한글이 나옵니다. 왼쪽 위의 file - build setting을 눌러 빌드한 뒤, 유니티를 종료합니다. 

 

여기서부터 저는 굉장히... 모르겠습니다. 저도 왜 이게 이렇게 해야 하는 건지 모르고, 어쩌다가 이걸 발견하게 된 건지 아직도 모르겠습니다. 맞는 방법인지도 모르겠네요. 한글화 카페에서 도움 받은 대로 한 건데, 다시 해 보니까 한번은 안 되고 한번은 되고... 제가 이거 만들 때 제정신이 아니었던 것 같습니다. 어쨌든, 성공한 방법을 (아마도) 적어 둡니다.

 

하여튼... 원래는 UABE로 모든 걸 다 처리하려고 했는데, SDF 폰트 이미지 파일을 넣을 때 자꾸 UABE가 뻗어버리는 문제가 발생했습니다. 그래서, UnityEX를 병행해서 사용했습니다. 

 

우선, UnityEX를 이용하여 방금 우리가 유니티로 만들어 낸 게임의 sharedassets0을 전부 뜯어 줍니다. 그 뒤, 해당 폴더로 가면 Unity_Assets_Files 폴더가 있고, 안에 들어가면 sharedassets0의 파일 전체를 볼 수 있습니다. 우리에게 필요한 것은 폰트 이미지 파일입니다. textures 폴더로 가서, 안에 있는 dds 파일의 이름을 perfect_font_use_this 라고 바꿉니다. 그 뒤 해당 파일을 복사합니다. 

 

그리고 다시 UnityEX를 이용해서, 이번에는 원본 게임의 sharedassets0을 전부 뜯습니다. 그리고 똑같이 textures 폴더로 가서 아까 복사해 둔 파일을 붙여넣습니다. 그러면 이름이 같은 파일을 대체할 것이냐고 묻고, 예를 눌러 덮어씌웁니다. 그 뒤, UnityEX에서 import files를 누릅니다. 이러면 UnityEX는 Unity_Assets_Files 폴더에 있는 것을 그것의 원래 출처, 지금의 경우 sharedassets0 파일 안에 덮어씌웁니다. 

 

자, 이제 우리는 SDF 폰트 이미지 파일이 변경된 sharedassets0을 얻었습니다. 이제 좌표를 바꿔야 합니다. 여기서, 헥스 에디터를 쓸 필요 없이 UABE로 할 수 있습니다. 

 

 

우리가 만든 한글패치용 유니티 게임의 sharedassets0을 UABE로 열고, 거기서 Monobehaviour 파일을 찾습니다. 뒤에 final은 유니티에서 폰트를 만들 때 제가 붙인 이름입니다. 만약 그냥 폰트 이름으로 저장하셨다면, 폰트 이름이 뒤에 있습니다. 해당 파일을 클릭한 뒤 export dump를 눌러 JSON으로 내보냅니다. 내보낼 때 파일 형식을 바꿀 수 있습니다.

 

이제 패치하려는 게임도 동일하게  sharedassets0을 UABE로 엽니다. 

 

 

말씀드렸듯이, 보통은 뒤에 폰트 이름이 있습니다. 앞선 글들을 읽으셨다면 저 apercu가 이 게임의 대사에 쓰이는 폰트라는 것을 알 수 있습니다. 이것도 동일하게 JSON으로 내보냅니다. 그 뒤, 원본 게임의 JSON 파일을 엽니다. 저는 코드를 보는 일을 전에 몇 번 하려고 비주얼 스튜디오 코드를 깔아 둔 상태라 해당 프로그램을 사용했지만, 노트패드를 쓰셔도 비슷하게 하실 수 있습니다.

 

 

지금 드래그한 부분이 제가 변경한 부분입니다. 우리가 한글패치용으로 만든 게임에서 추출한 JSON 파일에서 저 부분을 복사해서 붙여넣으면 됩니다. 정확히는, 0 FaceInfo m_fontInfo 부분을 대체하는 겁니다.

 

 

그 뒤에는, GlyphInfo m_glyphInfoList 부분을 복사해서 붙여넣기 하시면 됩니다. 대충 보기에는 내용이 얼마 없는 것처럼 보이지만, 옆을 보시면 실제로는 2만 줄이 넘는 내용입니다. 따라서, 접기 기능을 이용해서 해당 부분을 접은 뒤 복사해서 붙여넣기 하시는 게 좋습니다. 다 수정했으면 저장합니다.

 

 

그 뒤 다시 UABE에서 import dump 기능을 이용해서, 방금 수정한 걸로 JSON 파일을 바꿔 줍니다. 다 한 뒤 ok를 누르면, 모든 것이 변경된 sharedassets0 파일을 얻을 수 있습니다. 

 

 

폰트가 바뀐 것을 확인할 수 있습니다. 인게임 안에서의 자막 크기도 문제가 없었습니다.

 

이렇게, 길고 긴 한글화가 끝났습니다. 

 

다음은 후기입니다...