Как перевести игру на Unity на английский
Переводите игры на Unity с RuneTranslate — читая TextAsset, поля MonoBehaviour (Mono и IL2CPP) и StreamingAssets, почему это только вынесенный текст и как защита идентификаторов удерживает вас от поломки игры.
Unity — движок, стоящий за растущей долей японских инди-игр и визуальных новелл — и самый хитрый из распространённых движков для перевода, потому что у Unity нет единого формата текста. Диалоги могут жить в блобах TextAsset, в строковых полях MonoBehaviour, в россыпных скриптах StreamingAssets или скомпилированными прямо в DLL на C#. Это руководство проводит через перевод игры на Unity с RuneTranslate и, что не менее важно, объясняет одно правило, что делает Unity другим: только вынесенный текст.
Сначала большая оговорка: только вынесенный текст
RuneTranslate переводит текст Unity, который живёт в данных — файлах ресурсов, которые движок загружает во время выполнения, включая строковые поля на компонентах MonoBehaviour (диалоги, имена, подписи). Он читает эти поля на сборках Mono и IL2CPP: раскладка типов приходит из собственных DLL игры на Mono или реконструируется из метаданных IL2CPP, когда нет папки Managed/. Чего он не может достичь — это текст, захардкоженный в сам скомпилированный C#-код (Assembly-CSharp.dll). На практике игры, которые держат свой скрипт в ресурсах и компонентах, переводятся хорошо — и открытие проекта, первый шаг, говорит вам, что у вас есть.
Что вам нужно
- RuneTranslate для Windows — бесплатно, каждый движок и провайдер разблокирован.
- Папка игры Unity — каталог с
.exeигры и папкой<GameName>_Data/(содержащейglobalgamemanagers,resources.assets,data.unity3dи файлыlevel*). - Целевой язык — английский, испанский, французский, немецкий, португальский, русский, китайский, итальянский, турецкий, вьетнамский и 20+ других.
- Один провайдер перевода. Бесплатный Google Translate работает из коробки; у DeepL есть бесплатный тариф; OpenAI, Anthropic, локальная модель и любой OpenAI-совместимый API — со своим ключом.
Шаг 1: Откройте папку игры
Запустите RuneTranslate, нажмите New project и укажите его на каталог игры Unity. Определение движка ищет папку _Data/ и идентифицирует проект как Unity. Встроенный Python-сайдкар UnityPy (поставляемый внутри установщика) открывает файлы ресурсов и перечисляет читаемые строки в рабочее пространство проекта под %APPDATA%/RuneTranslate/unity-workspace/<projectId>/. Ваша оригинальная папка игры никогда не изменяется. Unity — это движок best-effort — проверьте, что экспортированная сборка запускается, перед распространением.
Шаг 2: Как извлекаются строки
RuneTranslate читает текст из каждого места, где Unity выносит его наружу:
- TextAssets — блобы JSON / CSV / скриптов, встроенные в
.assetsи AssetBundles, нарезанные формат-осведомлённым экстрактором. - Строковые поля MonoBehaviour — отображаемый текст на компонентах (диалоги, имена, подписи), на сборках Mono и IL2CPP (информация о типах приходит из DLL игры или реконструируется из метаданных IL2CPP).
- StreamingAssets — россыпные файлы скриптов, обходимые напрямую на диске (
.json,.txt,.csv,.tsv,.xml,.yaml,.ksи другие). - Зашифрованные Addressable-бандлы — игры, которые AES-шифруют свои Addressable-бандлы ресурсов, расшифровываются автоматически (ключ выводится из собственного имени файла бандла), поэтому их текст извлекается как любой другой бандл.
Unity — это также место, где чрезмерный перевод наносит больше всего урона, поэтому RuneTranslate поставляет защиту для этого. Многие строки MonoBehaviour вообще не отображаемый текст — это управляющие идентификаторы и операнды потока: имена сцен, которые вызов LoadScene разрешает по строке, ключи маршрутизации сообщений, имена клипов анимации / звука, имена частей Live2D и значения сравнения внутри логики Fungus If / SetVariable (например, флаг вроде 村落出口). Переведи их — и игра тихо ломается — классический симптом это бесконечный экран «загрузки» без ошибки. RuneTranslate автоматически классифицирует их как исключённые (показаны красным, только по опциональному включению), поэтому редактор выводит настоящие диалоги и подписи и оставляет механику в покое. Подстановки Fungus {$var} и разметка {color=...} / TMP <...> маскируются за плейсхолдерами, чтобы они пережили перевод нетронутыми.
Шаг 3: Переведите и проверьте
Выберите провайдера и запустите. DeepL или LLM читаются лучше всего для диалогов; бесплатный Google Translate покрывает меню и названия предметов. Внесите ваш состав и повторяющиеся термины в глоссарий сначала — см. Глоссарий 101. Каждая строка попадает в редактор рядом с её источником; редактируйте инлайн (сохраняется при потере фокуса или Ctrl+Enter) и запустите необязательный AI-доработчик для вычитки вторым проходом. Бесплатный тариф работает с умеренным ограничением скорости (примерно в 2× медленнее на AI-провайдерах, меньше на скраперах) — те же движки, то же качество вывода; платный просто работает на полной скорости.
Шаг 4: Экспортируйте играбельную сборку
Нажмите Export. RuneTranslate копирует игру, затем патчит переведённые строки обратно в файлы ресурсов на месте. Та же защита исключений работает при обратной записи, поэтому старый проект не может случайно протолкнуть переведённое имя сцены или операнд потока при повторном экспорте. Вывод — полная, играбельная копия игры в выбранном вами месте — запустите .exe — и она играется на вашем целевом языке.
Переводите на не-латинский язык (китайский, японский, корейский, тайский, арабский), чьи глифы встроенный шрифт игры не может отобразить? RuneTranslate внедряет резервный шрифт в стек шрифтов TextMeshPro при экспорте, так что переведённый текст показывается вместо квадратиков отсутствующих глифов.
Известные ограничения
- Только вынесенный текст: строки, захардкоженные в скомпилированный C#-код (
Assembly-CSharp.dllна Mono или бинарник IL2CPP), не переводятся. Поля данных MonoBehaviour — да, на сборках Mono и IL2CPP. - Чтение MonoBehaviour на IL2CPP требует разбираемого
global-metadata.dat; сильно обфусцированные метаданные могут не реконструироваться (best-effort). - Best-effort: подтвердите, что экспортированная игра запускается и читается корректно, перед тем как делиться ею.
- Текст на изображениях (логотипы, нарисованный вручную интерфейс, подписи CG) не переводится — вне области машинного перевода.
Почему это проще старого способа
Ручной перевод Unity означал распаковку ресурсов с помощью UABE или AssetStudio, охоту за тем, какие TextAssets и поля MonoBehaviour держат настоящий текст, ручное избегание строк-идентификаторов, что роняют игру, затем повторный импорт без порчи таблицы ресурсов. RuneTranslate складывает извлечение, классификацию (чтобы вы не переводили механику), перевод и патч-на-месте в несколько кликов — с редактором открытым, чтобы вы контролировали формулировки.
Смотрите страницу движка Unity для полного списка функций, читайте руководство по TyranoBuilder про движок на основе HTML или скачайте RuneTranslate и попробуйте его на реальной игре.
Готовы попробовать RuneTranslate?
Бесплатный тариф открывает все движки и всех провайдеров перевода. Supporter ($3/mo) открывает полную скорость.
Скачать для Windows
