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