최근 수정 시각 : 2025-09-27 03:09:25

XUnity.AutoTranslator


1. 개요2. 특징3. 사용법
3.1. 설치3.2. 설정 파일 수정3.3. 번역 통일성 개선
4. 사용 예시5. 여담

1. 개요

ManlyMarco에 의해 개발된 유니티 전용 후커. 깃헙 릴리즈

2. 특징

기존 유니티 게임 번역에 있어 주된 난관이 됐던 폰트 문제를 손쉽게 해결해줄 수 있다는 점에서 주목을 받고 있다. 대다수의 해외 폰트들은 한국어를 지원하지 않아, 번역된 텍스트가 깨지지 않고 출력되기 위해서는 UABE[1]같은 프로그램을 이용해 번들 내부에 있는 폰트를 교체해줘야 했다. 그런데 TMP[2] 폰트를 교체하는 작업은 여러모로 번거로움이 컸다. 기존 게임의 폰트 데이터 에셋을 직접 수작업으로 수정하는 방식이나, 게임 제작에 사용된 것과 동일한 버전의 유니티 엔진을 사용하여 빌드 환경을 구축하고 기존 파일을 분석해 새로운 폰트 관련 데이터[3]를 생성 및 수정하여 삽입해야 하는 방식 등, 어느 쪽이든 상당한 수고와 약간이나마 기술적 지식을 요하는 난점이 존재했다. 하지만 XUnity.AutoTranslator를 사용하면 간단히 config 텍스트 파일을 수정하는 것만으로 이미 빌드된 폰트[4]를 사용할 수 있다. 이렇듯 기존에 패치 제작자들을 괴롭혔던 기술적 난관을 손쉽게 해결할 수 있게 된 점과, 쉬운 기계 번역 적용 등이 높은 접근성으로 작용하면서, 한글 패치 제작자는 물론 일반 사용자 양측에서 이용자가 점차 늘어나는 추세이다.

다만, 해당 툴은 매 실행 시마다 텍스트를 덮어씌워야 하거나 기존 번역 내용과의 충돌 등으로 인해 오류가 발생하는 등, 매커니즘적 한계가 명확하다. 이러한 불편함과 불안정성 때문에 정식 한글 패치팀이 꾸려질 가능성이 높은 AAA급 게임[5]이나 인기가 많은 주류 게임에서는 사실상 외면받는다.

결국, 온전히 XUnity.AutoTranslator에만 의존하는 경우는 다음과 같은 게임들에 한정된다.
  • 인기가 없어 아예 한글 패치 제작을 기대하기 어려운 소규모 인디 게임
  • 텍스트 양이 압도적으로 많아 제작자나 커뮤니티 차원에서도 손번역을 포기한 게임

주로 사용되는 번역기는 구글 번역, 파파고, DeepL 등이 있고, 일본어의 경우는 EZTrans XP, 중국어의 경우는 바이두 번역을 사용하기도 한다. 혹은 최근 LLM을 활용한 기계 번역이 각광을 받고 있는데, 번역을 위한 프롬프트에 GeminiChatGPT같은 LLM의 API를 넣고 번역 서버를 돌려 Custom 번역기 기능을 사용할 수도 있다.[6]

직접적으로 텍스쳐를 번역하는 기능은 없지만, 텍스쳐를 추출하거나 대체해서 출력되게 하는 기능이 있다. 다만, 게임에서 직접 로드된 텍스쳐만 추출하기 때문에, 실질적으로는 추출은 AssetStudio같은 다른 프로그램으로 하고 대체 기능만 사용하는 것이 일반적이다. 예시

3. 사용법

3.1. 설치

방법종속성특징
ReiPatcher독립다른 플러그인 프레임워크[7]가 있으면 사용 불가, 대부분의 게임에 적용 가능
BepInEx종속BepInEx 선행 설치 필요, 대부분의 게임에 적용 가능
MelonLoader종속MelonLoader 선행 설치 필요, 대부분의 게임에 적용 가능
IPA종속IPA 선행 설치 필요, Illusion 게임에만 적용 가능
UnityInjector종속UnityInjector 선행 설치 필요, 구형 Unity 게임에만 적합
한국어 사용자의 경우, 설치 방법의 종류와 무관하게 대부분의 게임에서 폰트를 교체해줄 필요가 있다. 가장 용이한 방법은 깃헙 릴리즈에서 "TMP_Font_AssetBundles_{날짜}.7z"를 받고, 게임 폴더에 압축을 풀어주어 사용하는 것이다. 사용할 폰트의 이름을 설정 파일의 "FallbackFontTextMeshPro" 부분에 입력해주면 된다.[8]
  • ReiPatcher
  • 깃헙 릴리즈에서 "XUnity.AutoTranslator-ReiPatcher-{버전명}.zip" 다운로드
  • 번역 대상 게임 폴더[9]에 압축 해제[10]
  • "SetupReiPatcherAndAutoTranslator.exe"를 실행해서 ReiPatcher 설치
  • "{게임 실행 파일 이름} (Patch and Run).lnk"를 실행해서 설정 파일 생성[11]
  • 게임 종료 이후, 생성된 설정 파일을 원하는 언어와 번역 방법에 맞게 수정
  • BepInEx
  • MelonLoader

3.2. 설정 파일 수정

입력된 값은 기본값이 아닌 예시를 위해 임의로 입력한 값이다. 수정은 메모장, Notepad++, VS Code 등 어떤 텍스트 에디터를 써도 무방하다.

설치 방법에 따라 설정 파일의 위치가 다르다. 그러나 설치 방법과 무관하게 모두 ini 확장자이며, 내부 형식은 대체로 동일하다.
[Service]
Endpoint=PapagoTranslate[12]
FallbackEndpoint=GoogleTranslate[13]
원하는 번역기[번역기]를 선택하는 설정이다.
  • Endpoint - 주 번역기
  • FallbackEndpoint - 주 번역기에서 응답이 없을 때[15] 사용하는 보조 번역기
[General]
Language=ko[16]
FromLanguage=en[17]
사용 언어에 따라 ISO 639-1 코드[코드]를 입력한다.
  • Language - 출력 언어
  • FromLanguage - 입력 언어
[Files]
Directory=Translation\{Lang}\Text
OutputFile=Translation\{Lang}\Text\_AutoGeneratedTranslations.txt
SubstitutionFile=Translation\{Lang}\Text\_Substitutions.txt
PreprocessorsFile=Translation\{Lang}\Text\_Preprocessors.txt
PostprocessorsFile=Translation\{Lang}\Text\_Postprocessors.txt
디렉토리 지정으로, 거의 사용되지 않는다.
[TextFrameworks]
EnableIMGUI=False
EnableUGUI=True
EnableNGUI=True
EnableTextMeshPro=True
EnableTextMesh=False
EnableFairyGUI=True
인식할 텍스트 렌더링 UI 시스템을 선택하는 설정으로, 보통은 디폴트 상태로 둬도 무방하다. 다만 Text임에도[19] 인식 못하는 것들이 있으면, False로 된 부분을 True로 바꿔주면 인식이 될 수도 있기에 그럴 때에 수정한다.

3.3. 번역 통일성 개선

sr:^(.+) is dead\.$ = $1가 죽었다.
위 예시처럼 정규식을 사용하면 반복되는 문장 구조를 번역하는 것이 용이해지고 통일성도 개선된다. '_AutoGeneratedTranslations.txt'에 바로 입력해도 무방하나, 가능하면 '_regex.txt' 등의 이름을 가진 텍스트 파일을 따로 생성하는 것이 추후 유지보수 측면에 있어 유리하다.

4. 사용 예시

5. 여담

  • Linux 기반인 스팀덱에서도 Lutris 등의 wine 호환성 레이어를 이용한 소프트웨어를 통해 사용이 가능하다.
  • 일반적으로 한국에서는 '유니티 자동 번역'으로 알려져 있다. 다만 이 자체에는 번역 기능이 없으며, 사전에 번역된 텍스트 파일이나 다른 번역기에 접근하기 위한 인터넷 연결이 반드시 필요하다.
  • 해당 프로그램은 '패치' 방식이 아니므로 엄밀히 말하면 이를 이용한 한글화는 한글패치가 아니다.[21] '패치'라고 함은 게임 파일 자체를 직접 덮어씌우거나 변조하는 것인데, 이 프로그램은 게임 실행 중 실시간으로 텍스트 출력 직전 혹은 직후 즉시 메모리상에서 텍스트를 후킹해서 번역본으로 변조하는 방식으로 작동하기 때문이다. 게임 파일을 직접 변조하는 것이 아니라 후킹 방식이기에, 난독화로 뚫기가 어려운 IL2CPP로 빌드된 게임에도 적용이 가능하다.

[1] Unity Asset Bundle Extractor[2] TextMeshPro[3] 예를 들어 MonoBehaviour 형식의 관련 데이터[4] XUnity.AutoTranslator 깃헙에서 기본적으로 arial unicode ms 폰트를 해당 툴 전용으로 빌드해서 함께 배포하고 있다. 물론 다른 폰트를 새로 빌드하거나, 아니면 구해서 사용해도 무방하다.[5] 다만 최근 AAA급 게임 중에 유니티 엔진을 사용하는 게임은 거의 없다.[6] 다만 이 경우, 번역 서버를 돌리려면 코딩을 해야 하기에 약간의 수고가 필요하다.[7] BepInEx, MelonLoader, IPA, UnityInjector[8] 예를 들어 "FallbackFontTextMeshPro=arialuni_sdf_u2019"[9] 스팀 게임의 경우, 라이브러리에서 게임을 우클릭하면 나오는 '관리-로컬 파일 탐색'에 해당하는 경로[10] 이때, "SetupReiPatcherAndAutoTranslator.exe"가 게임 실행 파일(exe)와 같은 폴더에 위치해야 한다.[11] 이제부터는 Ink 파일을 통하지 않고, 직접 게임을 실행해도 무방하다.[12] 파파고 번역[13] 구글 번역[번역기] 파파고 번역(PapagoTranslate), 구글 번역1(GoogleTranslate), 구글 번역2(GoogleTranslateV2), Bing 번역(BingTranslate), DeepL api 번역(DeepLTranslateLegitimate) 등이 주로 사용된다. 만약 로컬 혹은 외부 서버를 통해 번역기를 구동하고 있다면 Endpoint를 CustomTranslate로 설정해주고 상응하는 부분을 추가로 수정해주면 된다.[15] 서버 지연, 검열, 오류 등의 다양한 원인이 있다.[16] 한국어[17] 영어[코드] 한국어(ko), 영어(en), 일본어(ja), 중국어 간체(zh) 등.[19] UnityExplorer를 사용하면 판별이 용이하다.[20] 일반적인 텍스트 번역 방식과 섞어서 사용한 케이스[21] MORT를 한글 패치라고 하지 않는 이유와 같다.