Unity 게임을 영어로 번역하는 방법 (외부화된 텍스트)
RuneTranslate로 Unity 게임을 영어로 번역하는 단계별 가이드 — TextAssets, MonoBehaviour 필드, StreamingAssets 읽기, 왜 외부화된 텍스트만 지원하는지, 그리고 식별자 가드가 게임을 망가뜨리지 않도록 막아주는 방법.
Unity는 점점 더 많은 일본 인디 게임과 비주얼 노벨을 떠받치는 엔진이며, 흔한 엔진 중에서 번역하기가 가장 까다로운 엔진입니다. Unity에는 단일한 텍스트 형식이 없기 때문입니다. 대사는 TextAsset 블롭 안에, MonoBehaviour 문자열 필드 안에, 낱개의 StreamingAssets 스크립트 안에 있을 수도 있고, C# DLL로 바로 컴파일되어 들어가 있을 수도 있습니다. 이 가이드는 RuneTranslate로 Unity 게임을 번역하는 과정을 안내하고, 그에 못지않게 중요한, Unity를 다르게 만드는 단 하나의 규칙을 설명합니다: 외부화된 텍스트만.
먼저 중요한 단서: 외부화된 텍스트만
RuneTranslate는 데이터 안에 있는 Unity 텍스트를 번역합니다 — 엔진이 런타임에 로드하는 애셋 파일이며, MonoBehaviour 컴포넌트의 문자열 필드(대사, 이름, 라벨)를 포함합니다. 번역하지 않는 것은 개발자가 컴파일된 C# 코드에 하드코딩한 텍스트입니다 — Mono 빌드의 Assembly-CSharp.dll이나 IL2CPP 바이너리입니다. MonoBehaviour 필드는 Mono와 IL2CPP 빌드 모두에서 읽힙니다: RuneTranslate는 게임 자체의 DLL(Mono)에서 타입 레이아웃을 가져오거나, Managed/ 폴더가 없을 때는 IL2CPP 메타데이터에서 이를 재구성합니다. 실제로는, 스크립트를 애셋과 컴포넌트에 두는 게임은 잘 번역되고, 모든 대사를 컴파일된 코드에 구워 넣는 게임은 일부만 번역됩니다 — 그리고 어느 쪽인지는 열어보기 전까지 알 수 없으며, 그것이 첫 단계입니다.
필요한 것
- Windows용 RuneTranslate — 무료이며 모든 엔진과 제공업체가 잠금 해제되어 있습니다.
- Unity 게임 폴더 — 게임
.exe와<GameName>_Data/폴더(globalgamemanagers,resources.assets,data.unity3d,level*파일이 들어 있음)가 있는 디렉터리. - 대상 언어 — 영어, 스페인어, 프랑스어, 독일어, 포르투갈어, 러시아어, 중국어, 이탈리아어, 튀르키예어, 베트남어 등 20개 이상.
- 번역 제공업체 하나. 무료 Google Translate는 바로 작동하고, DeepL은 무료 등급이 있으며, OpenAI, Anthropic, 로컬 모델, 그리고 OpenAI 호환 API는 모두 자신의 키를 사용합니다.
1단계: 게임 폴더 열기
RuneTranslate를 실행하고 새 프로젝트를 클릭한 다음 Unity 게임 디렉터리를 지정합니다. 엔진 감지는 _Data/ 폴더를 찾아 프로젝트를 Unity로 식별합니다. 번들로 제공되는 UnityPy Python 사이드카(설치 프로그램 안에 포함)가 애셋 파일을 열고 읽을 수 있는 문자열을 %APPDATA%/RuneTranslate/unity-workspace/<projectId>/ 아래의 프로젝트별 작업 공간에 나열합니다. 원본 게임 폴더는 절대 수정되지 않습니다. Unity는 최선 노력(best-effort) 엔진입니다 — 재배포하기 전에 내보낸 빌드가 실행되는지 확인하세요.
2단계: 문자열이 추출되는 방식
RuneTranslate는 Unity가 텍스트를 외부화하는 모든 곳에서 텍스트를 읽습니다:
- TextAssets —
.assets와 AssetBundle에 내장된 JSON / CSV / 스크립트 블롭으로, 형식을 인식하는 추출기가 잘라냅니다. - MonoBehaviour 문자열 필드 — 컴포넌트의 표시 텍스트(대사, 이름, 라벨)로, Mono와 IL2CPP 빌드 모두에서 처리됩니다(타입 정보는 게임의 DLL에서 오거나 IL2CPP 메타데이터에서 재구성됩니다).
- StreamingAssets — 디스크에서 직접 순회하는 낱개 스크립트 파일(
.json,.txt,.csv,.ks).
Unity는 과잉 번역이 가장 큰 피해를 주는 곳이기도 하므로, RuneTranslate는 이를 위한 가드를 함께 제공합니다. 많은 MonoBehaviour 문자열은 애초에 표시 텍스트가 아닙니다 — 제어 식별자와 흐름 피연산자입니다: LoadScene 호출이 문자열로 해석하는 씬 이름, 메시지 라우팅 키, 애니메이터 / 사운드 클립 이름, Live2D 파트 이름, 그리고 Fungus If / SetVariable 로직 안의 비교 값(예: 村落出口 같은 플래그)입니다. 이것들을 번역하면 게임이 소리 없이 망가집니다 — 전형적인 증상은 오류 없이 끝없이 이어지는 „로딩“ 화면입니다. RuneTranslate는 이것들을 자동으로 제외됨으로 분류하여(빨간색으로 표시되며 직접 선택해야만 포함), 편집기가 진짜 대사와 라벨을 드러내고 내부 장치는 건드리지 않게 합니다. Fungus {$var} 치환과 {color=...} / TMP <...> 마크업은 자리표시자 뒤에 가려져 번역을 온전히 통과합니다.
3단계: 번역하고 검토하기
제공업체를 고르고 실행하세요. 대사에는 DeepL이나 LLM이 가장 잘 읽히고, 무료 Google Translate는 메뉴와 아이템 이름을 커버합니다. 먼저 등장인물과 반복되는 용어에 대한 용어집을 만드세요 — 용어집 101을 참고하세요. 모든 줄이 원문 옆의 편집기에 나타납니다. 인라인으로 편집하고(포커스를 잃거나 Ctrl+Enter로 저장), 선택적인 AI 리파이너를 실행해 2차 교정을 하세요. RuneTranslate 무료 등급은 유료보다 약 3–4× 느리게 제한됩니다 — 출력 품질은 동일합니다.
4단계: 플레이 가능한 빌드 내보내기
내보내기를 클릭하세요. RuneTranslate가 게임을 복사한 다음, 번역된 문자열을 애셋 파일에 제자리에서 다시 패치합니다. 동일한 제외 가드가 다시 쓰기 시에도 실행되므로, 오래된 프로젝트가 재내보내기 때 실수로 번역된 씬 이름이나 흐름 피연산자를 밀어 넣을 수 없습니다. 결과물은 선택한 위치에 있는, 완전하고 실행 가능한 게임 사본입니다 — .exe를 실행하면 대상 언어로 플레이됩니다.
알려진 제한 사항
- 외부화된 텍스트만: 컴파일된 C# 코드에 하드코딩된 문자열(Mono의
Assembly-CSharp.dll또는 IL2CPP 바이너리)은 번역되지 않습니다. MonoBehaviour 데이터 필드는 번역됩니다 — Mono와 IL2CPP 빌드 모두에서. - IL2CPP MonoBehaviour 읽기에는 파싱 가능한
global-metadata.dat가 필요합니다. 심하게 난독화된 메타데이터는 재구성되지 않을 수 있습니다(최선 노력). - 최선 노력: 공유하기 전에 내보낸 게임이 실행되고 올바르게 읽히는지 확인하세요.
- 이미지 텍스트(로고, 손으로 그린 UI, CG 캡션)는 번역되지 않습니다 — 기계 번역 범위 밖입니다.
이것이 예전 방식보다 쉬운 이유
수동 Unity 번역은 UABE나 AssetStudio로 애셋을 풀고, 어떤 TextAssets와 MonoBehaviour 필드에 진짜 텍스트가 들어 있는지 뒤지고, 게임을 크래시시키는 식별자 문자열을 손으로 피하고, 그런 다음 애셋 테이블을 손상시키지 않고 다시 가져오는 일이었습니다. RuneTranslate는 추출, 분류(내부 장치를 번역하지 않도록), 번역, 제자리 패치를 몇 번의 클릭으로 묶어냅니다 — 편집기가 열려 있어 표현을 직접 통제할 수 있습니다.
전체 기능 목록은 Unity 엔진 페이지 보기에서 확인하고, HTML 기반 엔진은 TyranoBuilder 가이드를 읽거나, RuneTranslate 다운로드 후 실제 게임에서 사용해 보세요.
RuneTranslate를 써볼 준비가 되셨나요?
무료 등급에서 모든 엔진과 모든 번역 제공자가 열립니다. Supporter($3/mo)로 최고 속도가 열립니다.
Windows용 다운로드