유니티 게임의 한글화와 패치 제작 – 서론

‘슬라임랜처’의 한글패치를 시작으로 ‘엘더스크롤 5 스카이림’ 및 베데스다의 게임 1개의 한글 패치 콘솔 이식, 저와 다른 한분이 동시에 시작하여 다른 분께 병합하여 진행했던 망겜 ‘스틸 디비전’, 두분이서 동시에 시작하여 한 분에게 도움을 드렸지만 다른 한 분이 먼저 완성하였고, 먼저 완성한 분께 이미지 관련으로 도움을 드린 ‘Detention'(‘반교’), 마지막으로 공백 기간이 있기 전에 급히 제작하였고, 패치 제작 방법만 공개한 상태이고, 현재 다른분이 한글화 공개 모집을 진행 중인 ‘Bomber Crew’, 그리고 유니티 게임 한글화, 한글 패치 제작에 관한 강좌 작성 예정 글을 올리고 나서 한글 폰트 주입 방법을 알려드린 ‘My Time at Portia’, 마지막으로 관련 질문을 받았던 ‘Cat Quest’ 까지 많지는 않지만 몇몇 게임들의 한글 패치 제작을 시도해보면서 많은 자료를 찾아보고, 많은 연습을 하여 지금은 어느정도 한글 패치를 제작할 수 있는 수준에 다달았습니다. 여러가지 이유로 한글 패치를 만들어 보고자 하는 예비 왈도분들이 제가 한글 패치를 만들 수 있게 될때까지 걸렸던 많은 시간들을 보내지 않고 적은 노력으로 원하는 바를 이룰 수 있도록 도와드리기 위하여 유니티 엔진으로 제작된 게임의 한글화 방법과 한글 패치 제작에 관한 강좌를 올리고자 합니다.

유니티 게임 우리말화 도구 베타 버전을 공개하였습니다. 이에 관한 설명은 GitHub의 wiki에서 서술합니다. https://github.com/dmc31a42/UnityL10nTool/wiki

본 강좌는 다음과 같이 구성되었습니다. 강좌가 작성될때마다 해당 강좌로 바로 갈 수 있게 링크가 제공됩니다. 아래의 순서는 강좌 작성에 따라 바뀔 수 있습니다. 본 강좌는 어떤 공개 라이센스를 적용할 것인지 확정되기 이전까지 독점적으로 제공됩니다. 일단은 어디에 퍼가는 것은 삼가하여주시기 바랍니다. 아마도 ‘CC BY-NC-SA 3.0’ 가 될것 같은데, 원작자가 https://github.com/DerPopo/UABE/issues/195 이런 말을 해서 고민중에 있습니다.

본 강좌는 70~80% 완성되면 바로 공개되며, 잘못된 부분이 있으면 그때 그때 수정하는 것으로 하겠습니다. 아래의 강좌 내용은 언제든지 수정될 수 있습니다. 질문은 댓글로 달아주시거나 GitHub(https://github.com/dmc31a42/UnityGameL10nTutorial)의 issue를 활용하여주시면 감사하겠습니다.

  1. (유니티) 게임에서 한글을 표현하는 방법에 대한 전반적인 설명
  2. 유니티 게임의 기본 폴더 구조
  3. Unity Asset Bundle Extractor(UABE) 사용법
  4. 언어 파일
  5. 유니티 에셋의 Serialization
  6. 서드파티 폰트 엔진(플러그인) 소개
  7. UABE를 사용하여 폰트 엔진 찾기
  8. 폰트 엔진을 포함하는 유니티 프로젝트 생성
  9. 한글을 지원하는 에셋을 추출하여 게임에 적용
  10. 서드파티 에셋(플러그인)을 사용하여 텍스트를 출력하는 게임의 한글화; MonoBehaviour 수정
    1. 유니티 에셋(번들)의 작동 구조 설명 : UnityEngine Serialization, Monoscript, MonoBehaviour
    2. 서드파티 에셋(플러그인) 소개
    3. UABE를 사용하여 해당 유니티 게임이 사용하는 서드파티 에셋 찾기
    4. 해당 서드파티 에셋(플러그인)을 포함하는 유니티 프로젝트 생성
    5. UABE를 사용하여 한글을 보여줄 수 있는 에셋을 본 게임에 적용
  11. 한글 패치 프로그램 제작
    1. UABE 정식 소개, UABE의 모드메이커 소개 및 UABE API 소개
    2. UABE API를 이용한 에셋 조작해보기
      1. 에셋 목록 탐색
      2. 에셋 추출
      3. 에셋 전체 교체 및 일부 수정
      4. 에셋 raw 파일의 PathID Hex 값 수정해보기
    3. 언어 파일 수정 해보기
      1. TextAsset 또는 외부 언어 파일을 파싱하기
        1. text 파일
        2. csv 파일
        3. sqlite 파일
      2. 온라인 협업 도구 포맷으로 추출하기, 가져오기
        1. 구글 스프레드시트
        2. zanata
      3. 외부에서 언어 파일 패치하기와 외부로 언어 파일 추출하기
    4. 언어 파일과 폰트 에셋을 *.assets 파일에 적용하기
    5. 게임 별 예제

유니티 게임의 한글화와 패치 제작 – 서론”의 13개의 생각

  1. 강좌 정말 감사합니다. 개인적으로 번역하고 싶은 유니티 게임이 하나 있는데 도움이 많이 될 것 같습니다. 언어 파일이 목차 5번의 형태로 되어있는거 같은데 정보를 얻을만한 곳이 없어 다음 글이 기다려집니다.^^

    좋아요

      1. Assembly-csharp를 뜯어보니 Resources.Load 함수를 통해 특정 폴더에서 리소스를 읽어오는 구조인 듯 한데 Resource.asset에는 해당 파일이 없고 확장자가 없는 데이터파일들이 수만개 있는데 해당 리소스의 위치를 도저히 찾을수가 없어서 방황하고 있었습니다. 강좌가 추가되기를 기쁜 마음으로 기다리고 있겠습니다. ^^

        좋아요

      2. 작업하고 있는 게임은 일본에서 서비스하고 있는 게임 ‘누구를 위한 알케미스트’입니다.
        말씀주신대로 ResourceManager를 찾아봤으나 대사 스크립트가 저장된 TextAsset을 찾지 못했습니다.

        좋아요

      3. 한국서버와 일본서버 간 컨텐츠 차이 때문에 일본 서버 하시고 싶어하시는 분이 제법 보이는 편인데 그때마다 언어의 장벽때문에 플레이하시는걸 그만두시는 분이 많아서 도전해보고 있습니다. UI부분은 한글화가 제법 진행되었는데 중요한 스크립트를 못 찾아서 문제이지만요.

        좋아요

      4. 또한 PC버젼은 한국서버에서는 지원하지 않고 있습니다. 제가 작업중인 파일도 PC버젼이구요.

        좋아요

      5. ILSpy로 텍스트를 읽어오는 함수를 확인해보니 모두 내부적으로 “Data/xxxxxx” 형식의 Path를 가지는 것을 확인했습니다. 그런데 컴파일하면서 내부적으로 저 Data라는 폴더가 어디로 가는지 알 수가 없네요.ㅜㅜ

        좋아요

  2. 코드 역분석으로 ASSET 목록을 따로 저장하는 파일이 있는것을 확인하고 해당 목록파일을 ASSEMBLY의 코드를 긁어와서 만든 프로그램으로 추출해서 결국 텍스트데이터 추출하는데 성공했네요. Nativeplugin으로 Decompress해서 텍스트를 로드하는데 파일을 수정한 후 Compress하는 함수의 레퍼런스가 따로 없어서 이 부분만 해결할 수 있으면 될 듯 합니다.^^

    좋아요

  3. 디버거로 대충 훓어봤는데요, Decompress랑 Compress랑 인자 사용하는 꼴은 똑같아서
    [DllImport(“NativePlugin”, CharSet=CharSet.Ansi)]
    public static extern IntPtr DecompressFile(string path, out int size);
    와 똑같을 것으로 보입니다. 아직 ganian님이 말씀해주신, ‘ASSET목록 긁어오는 부분(ReadAssetListProc)’, ‘Nativeplugin.dll로 Decompress 하는 부분(LoadTextData)’만 확인하고 실제 테스트는 해보지 않았습니다. 일단 ganian님이 해보신거 실증을 해보고 다시 확인해보겠습니다.
    일단 해당 게임은 일반적인 방식으로는 풀리지 않는거는 확실하네요.
    그리고 오고간 내용들은 https://github.com/dmc31a42/UnityGameL10nTutorial/issues/2 여기에 적어놓겠습니다.
    그리고 이후로는 GitHub에서 이야기해주실 수 있나요? 워드프레스는 댓글달면 알림이 잘 안오더라구요.

    좋아요

댓글 남기기