dmc31a42 / UnityL10nTool

Unity Game Localization Tools is helper to make localization patch for un-supported language.
70 stars 9 forks source link

NGUI폰트 추가 문의 #34

Open Jjoony opened 5 years ago

Jjoony commented 5 years ago

안녕하세요. 아래 도와주신 덕분에 폰트 교체는 성공하였습니다만.. 안타깝게도 원래 게임에 들어있던 폰트에는 있는 기호들이 나눔폰트에는 없어서 표시가 안되는 경우가 발생했습니다 ㅜㅜ 그래서 폰트를 제작해보려고 시도중입니다..이건 여기서 물어볼 일은 아니구요. 제작한 폰트를 다시 추가하려고 남겨주신 위키를 참고하려는데, 다른 폰트는 추가방법 설명이 있는데 NGUI폰트는 없더라구요. 다른 폰트 추가방법을 참고해서 비슷하게 진행하면 될까요? 유니티를 사용해본적이 없어서..일단 설치는 하고 있습니다. 다른 폰트 남겨주신 것과 유사하게 가능한 거면 그렇다고만 해주시면 됩니다. 즐거운 하루 보내세요!

dmc31a42 commented 5 years ago

네 TMPFont의 폰트 생성과 비슷한 방식으로 해당 폰트를 쓰는 게임을 만드는 법은 인터넷에서, 폰트 에셋을 추출하여 UnityL10nTool에서 사용할수있게 하는 법은 위키를 참조하시면 됩니다.

생각해보니, 기존폰트는 그대로 유지하면서 한국어 폰트만 추가하는 방법이 떠올라서 한번 시도해보려합니다.

Jjoony commented 5 years ago

넵 감사합니다. 시도해봐야겠어요. 말씀하신 한글폰트만 추가하는 방법도 빨리 완성되면 좋겠네요!

dmc31a42 commented 5 years ago

NGUI 폰트는 fallback(폰트에 지원하는 글자가 없으면 리스트에 있는 다른폰트에서 가져오는 기능)을 지원안하네요. 유니티 기본 폰트나 TextMesh Pro 폰트는 fallback을 지원해서 이미 있던 폰트의 내용물은 안 건들이고 fallback에만 추가하는게 가능한데 NGUI에 fallback이라 생각했던 항목이 전혀 다른 기능이었습니다. 제가 이미지 조작을 할 수 있는 기술을 습득하지 않는 이상 NGUI는 지금 현상태가 최선으로 보입니다.

Jjoony commented 5 years ago

아하 그렇군요..아쉽지만 어쩔수 없죠. 감사합니다!

Jjoony commented 5 years ago

으음..UnityL10nTool에 대한 질문이 아니게 되어서 죄송합니다만..물어볼 데가 없네요;; 위키와 이것저것 참조해서 폰트 플러그인을 생성해보려고 시도중인데.. 일단 유니티 최신버전에서는 NGUI 무료버전은 지원이 안되는것 같더라구요..설치했지만 에러가 나면서 메뉴가 안나옵니다.. 그래서 4 버전을 깔고 폰트 생성하고 게임까지는 어찌저찌 만들었습니다. 글자는 제대로 나오더라구요.. 그런데 UABE를 사용해서 추출하려고 보니 위키에 있는 xxx_SDF 에셋은 없고..폰트랑 FontMaterial이라는 것만 있었습니다. 그래서 예제와 동일하게 TextMeshPro Object를 생성해보려고 했더니, 이건 또 4.0은 지원을 안하네요;;;; 4 에서 게임 빌드했을때 xxx_SDF 에셋을 나오게 하려면 뭘 해야할까요...?ㅠㅠ

dmc31a42 commented 5 years ago

TextMesh Pro에서 MonoBehaviour TMP_Font, meterial, Texture2D에 대응되는게 NGUI에서는 MonoBehaviour UIFont, meterial, Texture2D입니다. 3개의 에셋에서 뽑아야 하는 정보는(위키대로하면 지워야할 정보는) NGUIFont 플러그인폰트안에 기본으로 있는 json을 보고 파악하셔야해요. 그래도 어려움을 겪으시면 내일 NGUI폰트생성법도 위키에 올려놓겠습니다.

Jjoony commented 5 years ago

MonoBehavior UIFont라는건 아예 없고...FontMaterial과 FontTexture라는걸 추출해봤는데 내용이 비슷하지도 않은걸 봐서는 아예 잘못했나 보군요....ㅜㅜ 일단 위키 올라올때까지 이래저래 시도해보겠습니다. 감사합니다..

dmc31a42 commented 5 years ago

아....가장 중요한걸 말씀안드린거같은데, NGUI는 프로젝트를 "2D"로 생성해야하고, 생성한 폰트를 안쓰면 Assets에 포함이 안됩니다.

Jjoony commented 5 years ago

음..검색하다보니 처음에 했던게 완전히 틀렸던것 같고..새로 해보았습니다.

  1. 말씀하신 대로 2D 프로젝트를 생성했고요,
  2. 일단 TTF폰트를 만들어서->BM폰트 변환(확장자fnt->txt로 바꿈, png생성)
  3. Unity4에 NGUI 설치, NGUI->Font Maker에서 2의 BM폰트(txt파일과 png파일)를 가지고 폰트 생성
  4. NGUI->Create Label해서 위에서 만든 폰트를 써서 글자를 넣고, Build해서 글자 출력까지 확인합니다. 글자가 엄청 흐리긴 하던데..나오긴 나와요
  5. 여튼 그러고 나서 UABE로 Shared Asset을 열어서 MonoBehaviour UIFont, Material, Texture2D 파일을 JSON으로 Dump 여기까지 하고 열어봤는데...NGUI Plugin에 있던 파일과는 형태가 너무 다르더라구요.. 처음보다는 진전이 있는것 같긴 한데 아직 갈길이 머네요 ㅎ...ㅜㅜ 그래도 계속 조언해주신 덕분에 조금씩이나마 앞으로 가고 있는것 같습니다. 제가 너무 괴롭혀서 죄송합니다..시간 나실때 조언 해주시면 감사하겠습니다. 캡처
Jjoony commented 5 years ago

안녕하세요.. 며칠동안 이것저것 시도를 해보았지만 폰트 문제는 아직 해결이 안되네요 ㅜㅜ 어떤걸 시도해보면 좋을지 간단한 방향이라도 조언을 주실 수 없을까요? ㅜㅜ 위에서 한 것중에 잘못된 스텝이 있는지 모르겠네요.. 부탁드립니다. 감사합니다..

dmc31a42 commented 5 years ago

일단 에셋이 만들어진거보면 스스로 잘하신거 같습니다. 다만 제가 깜빡하고 말씀 안드린것이 BMFont generator에서 Export Option 중 Bit depth를 32로 설정하셔야 하고, UIFont 에셋만들때 Atlas 없이 만들어야합니다. Atlas를 같이 만들면 원본 이미지를 스스로 일부 수정합니다.

동그라미 치신 에셋이 필요한 것은 맞습니다. JIMEFont_0, (Texture2D, 3번), MonoBehaviour (MonoBehaviour : UIFont , 163번)을 Export Dump하고 UABE json dump로 추출합니다. 그리고 NGUIFontAsset폴더에 있는 Atlas.json, Font.json을 복사하여 이름을 원하는 폰트이름(되도록이면 영문명으로 추천)으로 바꿉니다. 그리고 Font.json을 먼저 열고 추출한 에셋중 Texture2D를 같이 띄웁니다. 이름이 같은 항목의 값을 Texture2D에서 Font.json쪽으로 옮깁니다. FontFamilyName는 UnityL10nTool에서 표시되는 폰트의 이름입니다. 원하는 이름으로 지정하고 저장합니다. image Atlas.json은 복사는 하시되 수정을 할 필요는 없습니다. 최근에 프로그램이 일부 변경되어 Atlas를 사용하지는 않습니다만 폰트 인식쪽의 로직을 변경하지 않아 이 파일이 없으면 NGUI 폰트 플러그인의 폰트로 인식 못합니다. MonoBehaviour (MonoBehaviour : UIFont) json 파일을 열고 "0 PPtr m_GameObject" 부터 "0 BMFont mFont": 의 직전 줄까지 지웁니다. image 그리고 "0 int mSpacingX": 0, 부터 "0 float mPixelSize": 1, 직전 줄까지 지웁니다. image "0 Array mSymbols": [], 부터 "0 float mDynamicFontOffset": 0 까지 지웁니다. image 이렇게 수정하면 기본폰트의 Mono.json 파일과 형식이 비슷한 것을 확인할 수 있습니다. 그리고 이렇게 수정한 파일의 이름을 폰트이름.Mono.json 으로 바꿉니다.

마지막으로 에셋을 추출한 assets 파일이름과 같은 이름의 assets.resS 파일이 있는데 이 파일을 복사하여 폰트이름.assets.resS로 변경합니다. 그러면 기본으로 주어지는 NanumGothicExtraBold 폰트에 쓰이는 파일과 동일한 파일들이 준비된 것을 확인할 수 있습니다.

dmc31a42 commented 5 years ago

그리고 폰트의 해상도가 나쁜 것은 제가 테스트했을 때 적어도 한글은 폰트크기가 48이상정도는 되어야 하더라구요, 그렇게 만들면 적어도 이미지의 해상도가 2048x2048이상이 되어야 모든 글자가 하나의 이미지 안에 다들어 가집니다.

Jjoony commented 5 years ago

자세한 답변 감사합니다! 조만간 잘 됐다는 좋은 소식 가지고 돌아올 수 있었으면 좋겠네요..ㅜㅜ 가르쳐 주신대로 시도해보겠습니다!

Jjoony commented 5 years ago

으음..이부분이 문제군요.. MonoBehaviour.json을 열었을 때, 내용이 이것밖에 없습니다. monobehavior 아마도 UI를 만들때 잘못된게 아닐까 싶긴 한데 어디가 잘못된건질 모르니 답답하네요 ㅜㅜ 만든 NGUI Label은 이렇게 나옵니다. nguilabel jimefont 빌드했을때 화면에 출력되는것 까지는 확인했습니다. 혹시 특정 컴포넌트를 써야하는게 있나요..? 거의 다 된거 같은데..매번 감사드립니다.

dmc31a42 commented 5 years ago

https://blog.nakwonelec.com/2018/03/26/unity-asset-bundle-extractor-%ec%82%ac%ec%9a%a9%eb%b2%95/ 의 get script information을 참고하세요

Jjoony commented 5 years ago

흐음...MonoBehavior 선택하고 View Data나 Export를 선택해도 그 물어보는 팝업창이 뜨지 않네요.. UABE 버전은 2.2stableb 입니다..ㅜㅜ 32bit버전, 64bit버전 동일합니다. uabe22 어떤걸 체크해보면 좋을까요..ㅜㅜ

dmc31a42 commented 5 years ago

‘Assets info’ 창의 상단 메뉴에 ‘Tools’-‘Get script information’을 클릭하시면 그 팝업창을 불러올 수 있습니다. 그리고 폰트 만들 때는 무조건 2.2beta4 버전을 사용해야 합니다. 2.2stable부터 json의 형식이 달라져서 UnityL10nTool에서 해당 결과물을 쓸 수 없습니다. 마지막으로 유니티 2018.2버전 이후 버전으로 샘플 게임을 만들었을 경우 MonoBehaviour가 정상적으로 읽어지지 않을 때 ‘Tools’-‘Get script information’을 다시 눌러서 첫번째 'Open the Assembly file' 창이 뜨면 Type 명 끝에 괄호안에 있는 dll 파일 이름과 동일한 파일을 Managed 폴더에서 선택 후 확인 버튼을 누르고 나머지는 기존과 동일하게 취소버튼을 누르면 됩니다.

Jjoony commented 5 years ago

마지막 난관인것 같네요..다른건 말씀하신 대로 다 성공했습니다. UABE 2.2beta4를 사용했구요, 그런데..유니티 게임 빌드할 때 resS 파일이 생성되지 않았습니다....ㅜㅜ 구글 검색을 해보니 스트리밍 에셋을 사용해야만 만들어진다는것 같기도 하고요.. 프로젝트 폴더를 전체 검색해보니 temp폴더에 생성된 파일이 있는데 0 byte인걸로 봐서는 쓸모가 없을거 같은데요.. 특정 무언가를 해야만 생성이 되는걸까요...? 혹시나 싶어 resS파일 없이 추가를 해보았으나 역시나 리스트에는 표시되지 않네요..ㅜㅜ 3D프로젝트로 만들었을때도 resS파일은 없었습니다... 아 한가지 설명해주신 것과 다른점이 있었다면..그 Tools-Get Script Information을 선택했을때 팝업은 안뜨고 그냥 커맨드창이 잠시 떴다가 사라졌습니다. 어쨌든 원하는 결과는 얻었으므로 크게 다를건 없을것 같긴 하네요..

dmc31a42 commented 5 years ago

유니티 프로젝트 폴더 압축해서 첨부파일로 올려주시겠습니까?

Jjoony commented 5 years ago

안녕하세요. 제 힘만으로 어떻게든 해보고 싶었는데 ㅜㅜ 프로젝트 파일이 덩치가 커서 바로 첨부가 안되네요. 링크로 남깁니다. https://www.dropbox.com/s/ll1jpbluckkm9xu/FontCreator.zip?dl=0

잘 부탁드립니다.

dmc31a42 commented 5 years ago

유니티 버전은 최소 5버전 이상, 추천버전은 2018.2 버전으로 에셋을 생성하시기 바랍니다. 4버전에는 resS 파일을 쓰지 않아요

Jjoony commented 5 years ago

감사합니다..유니티5에서는 무료 NGUI 플러그인이 에러가 나는데 에러 메시지 보고 C#파일 수정해가면서 어떻게든 만들긴 했습니다. 툴에서 폰트 리스트에도 뜨고, 폰트 교체후 에러 없이 실행은 되었는데..안타깝게도 글자가 아예 나오지 않는군요.......ㅜㅜㅜㅜ 일단 처음부터 다시 여러가지로 시도는 해보겠습니다. 혹시 제가 확인해야할 부분이 있을까요?

dmc31a42 commented 5 years ago

저녁 7~8시쯤에 디스코드로 오실수있나요? nakwonelec#1553 으로 연락주세요

Jjoony commented 5 years ago

넵 7시 좀 넘어서 연락 드리겠습니다. 여러모로 민폐라 잘 부탁드립니다..

Jjoony commented 5 years ago

안녕하세요. 쉬시는 중일거 같아서 귀찮으실까봐 간단히 메시지 남깁니다. 도와주신 덕분에 NGUI폰트 문제 해결이 되어서 잘 나오고 있었는데요.. 앱이 업데이트 되면서 구조가 바뀌었습니다;;; 이전에 NGUI폰트 2개, Unity Default Font 1개가 있었고, 이것들을 다 새 폰트로 교체하면 되었는데요, 업데이트 되면서 NGUI폰트 1개, Unity Default Font 2개로 바뀌었습니다. 그래도 뭐 폰트만 교체하면 되겠지 하고 폰트를 다 교체했는데, 메인 화면의 폰트가 바뀌지 않네요;;; 일부러 한국어로 바꾸지 않고 폰트만 교체한 상태에서 테스트를 해보았는데 확인할 수 있는 폰트 3개를 모두 교체해도 메인 화면의 폰트는 그대로입니다. 물론 리소스를 한국어로 바꾸면 안나오는 걸로 봐서 이미지는 아니구요... 게임을 진행해보면 일부는 한국어가 나옵니다. 폰트 교체는 제대로 됐다는 얘기지요.. 어딘가에 알 수 없는 곳에 폰트가 새로 들어간거 같은데..도통 알수가 없네요 ㅜㅜㅜ 오늘은 푹 쉬시고 나중에 시간 나실때 한 번 봐주실 수 있으면 너무나 감사하겠습니다. 즐거운 휴일 보내시기 바랍니다.

dmc31a42 commented 5 years ago

6461a36224040f7c1733df85bb2dc4ac6bb8e724 https://github.com/dmc31a42/UnityL10nTool/releases/tag/v0.1.16 메뉴에 관련된 폰트가 resources.assets으로 옮겨졌네요, NGUI는 resources.assets은 안쓰는줄 알아서 이쪽은 검색안했거든요, 검색하게 고쳐놓았고 NGUI폰트도 2개 뜨고, 메뉴도 한글로 뜨는거 확인했습니다.

Jjoony commented 5 years ago

잘 되네요! 정말 감사합니다.