Как переводить игры на юнити
Перейти к содержимому

Как переводить игры на юнити

  • автор:

Unity «Простая система перевода игры на другие языки»

Unity Unity Unity Unity

На этом все. Далее можно, например, создать кнопку перевода на другой язык. Написать примерно вот такой скрипт. И язык будет меняться во всей игре.

using UnityEngine; public class OnClickBtnLanguage : MonoBehaviour < [SerializeField] CurrentLanguage currentLanguage; public void OnClick() < currentLanguage.ChangeLanguage(); EventsManager.onChangeLanguage?.Invoke(); >>

Во время написания статьи, я понял, что Current Language нужно создать как-то по-другому. Например, статическим классом или синглтоном. Из-за того, что приходится каждый раз его выбирать в SetTextMeshProLanguage. Хотя он всегда будет в единственном экземпляре.

Что касается системы в целом. В дальнейшем, можно очень просто добавить еще один язык. И строки перевода. Если не устроит какая-то часть системы, то ее можно легко заменить (до того, как начали внедрять в свой проект).

Русификатор для любой игры сделанной на движке Unity

Часто, а особенно последнее время, мы встречаем игры, где русский язык отсутствует как класс. Если игра сделана на движке Unity, то это не проблема. Собственно данным способом можно перевести на любой язык эту игру, причем с любого другого. Только одно, но, эти языки должен знать наш любимый Google Translator.

Ну да не буду тянуть, давайте русифицируем игру на Unity.

  1. Надо скачать архив XUnity.AutoTranslator-BepIn-5x- .zipздесь .
  2. Затем еще архив BepInEx_x64_5.4.9.0.zipздесь (обратите внимание, в названии архива есть хы 64 или хы 86, это указывает на разрядность вашей ОСь, оперативной системы, для Unix там тоже есть).
  3. Распаковываем прямо в корень игры.
  4. Запускаем нашу игру.
  5. Выходим из игры, не сворачиваем, а именно выходим.
  6. Идем по пути \BepInEx\config\AutoTranslatorConfig.ini, заходим внутрь, в смысле открываем данный файл на редактирование.

В файле изменяем следующие настройки:

  • Language=ru (на какой язык переводить);
  • FromLanguage=en (язык в игре или с какого переводить);

Что еще можно поменять в файле:

  • MaxCharactersPerTranslation=2500 (максимально можно поставить 2500 отвечает за длину захвата текста);
  • IgnoreWhitespaceInDialogue=true (обычно надо смотреть, если с true работает норм, то это айс, если в переводе исчезли пробелы, то ставим false);
  • OverrideFont= (тут можно свой шрифт прописать для перевода, он должен быть установлен в вашей ОСь);
  • OverrideFontTextMeshPro= (отвечает за замену шрифтов в играх с TextMeshPro, как узнать есть в игре эта загадочная хрень, сделали все как надо, но в игре вместо русского кракозябры, признак наличия этой хрени, а значит этот параметр нам в помощь, подрубаем шрифт с криллицей).

Теперь запускаем игру и наслаждаемся магией перевода от Google Translator, правда он часто на алиэкспресском говорит, но, когда мы занимаемся нехорошим делом нас не остановить!

Еще немного о плагине, что мы поставили, в игре им можно управлять, собственно, вот:

  • ALT + 0: включить интерфейс XUnity AutoTranslator. (Это ноль, а не O);
  • ALT + T: чередовать переведенные и не переведенные версию всех текстов, предоставляемых этим плагином;
  • ALT + R: перезагрузить файлы переводов. Полезно, если вы изменяете текстовые и текстурные файлы на лету. Не гарантируется работа для всех текстур;
  • ALT + U: ручной захват. Захват по умолчанию не всегда подхватывает текст. Плагин попытается сделать поиск вручную;
  • ALT + F: если настроен OverrideFont, будет переключаться между переопределенным шрифтом и шрифтом по умолчанию;
  • ALT + Q: перезагрузите плагин, если он был выключен.

На этом все, ставим и наслаждаемся алиэкспресским от Google Translator. Добра вам и успеха!

Как переводить игры на юнити

Всем привет, раскажу как переводить игры созданые на движке Unity.

Профессиональный перевод игр на этом движке достаточно сложный, из-за вшитой зашиты, поэтому достаточно проблематично выдирать текстуры и текст из данного движка, что бы потом их обратно вставлять в игру. Я сам достаточно слабо ориентируюсь в програмировании на этом движке, поэтому расскажу о самом простом способе с использованием автоперевода текста, что по большей части подходит для собственных нужд, чем для профессионального перевода проекта.

1.Создаем патч для перевода.
1) Установить переводимую игру юнити на диск c, что бы на его путях не было русских символов.
Как пример C:\Games\novella

2)Далее вам необходимо будет скачать программу XUnity.AutoTranslator

Выберите самый новый релиз ( releases ) вам нужно будет скачать файл под названием XUnity.AutoTranslator-ReiPatcher-номер_версии.zip .

В скачаном зип файле будет лежать файл SetupReiPatcherAndAutoTranslator.exe

3) Распакуйте его в корневую папку с игрой, где файл exe.

4) Запустите распакованный файл SetupReiPatcherAndAutoTranslator.exe .
Он создаст новый exe файл, который будет иметь приставку к имени (Patch and Run)

5) Запустите созданый exe файл. Он пропатчивает переводимую игру и создает файл конфигурации.

6) Когда у вас игра окончательно запустится, вам нужно будет выйти из приложения и зайти в файл конфигурации \AutoTranslator\Config.ini

2. Настраиваем конфигурационный файл (Config.ini)

1) Выбираем переводчик
Данная программа поддерживает множество переводчиков но самый качественный перевод будет у диип, поэтому вместо GoogleTranslateV2, прописываем DeepLTranslate

[Service]
Endpoint=DeepLTranslate

2) Далее выбираем язык с которого на какой будем переводить. Например, у вас проект на японском(ja),(английский будет en), и вам нужно будет его перевести на русский(ru), то прописываем следующее:

[General]
Language=ru
FromLanguage=ja

3) Нужно прописать что бы любой текст, который попадется в игре, программа его извлекала и переводила через переводчик.

[TextFrameworks]
EnableIMGUI=True
EnableUGUI=True
EnableNGUI=True
EnableTextMeshPro=True
EnableTextMesh=True
EnableFairyGUI=True

4)Настраиваем перевод
Распишу только то, с чем сталкиваться мне приходилось, и соответственно использовал

[Behaviour]
MaxCharactersPerTranslation=1000 ;Переводимое число символов
EnableUIResizing=True ;попытка изменить размеры символов в строке текста, что бы влезло
OverrideFont= ;определить свой шрифт gui, смотри TextMeshPro с кирилицей
OverrideFontTextMeshPro= ;определить свой шрифт, если у вас квадратики вместо текста перевода, смотри TextMeshPro с кирилицей

5)Извлекать изображения(текстуры) на перевод

[Texture]
TextureDirectory=Translation\\Texture
EnableTextureTranslation=True
EnableTextureDumping=True
EnableTextureToggling=True
EnableTextureScanOnSceneLoad=True
EnableSpriteRendererHooking=False
LoadUnmodifiedTextures=False
DetectDuplicateTextureNames=False
DuplicateTextureNames=
EnableLegacyTextureLoading=False
TextureHashGenerationStrategy=FromImageName
CacheTexturesInMemory=True
EnableSpriteHooking=False

Остальное оставляете без изменений..

После изменения конфигурационного файла вам необходимо запустить игру. Можно запустить exe файл что был по умолчанию, вам нужно будет подождать некоторое время, пока некоторые текстуры программа извлекет. После запуска программы. У вас высветится главное меню на исходном языке, через сек 7 программа автоматически переведет текст на русский язык, если шрифт конечно поддерживает кирилицу(или текст в виде картинки)

Заходим в раздел настройки, сохранения, разные разделы меню и нажимаем кнопку старт и проходим с автоперевод игру, не забывая заходить в историю(log)

Теперь рассмотрим тот вариант, если вы хотите создать качественный перевод, а не использовать автоперевод.

3. Работа с текстом
Весь текст, которая программа поймает, оно кидает в файл \AutoTranslator\Translation\ru\Text\_AutoGeneratedTranslations.txt

Откройте его и вы увидете там примерно такое

はじめから=Сначала
つづきから=Продолжить
おわる=Выход
撫でてもいい……?=А можно. Погладить Вас.

Вы можете изменять текст диалога только после знака =
Текст из истории(log) только между тегами аудио файлов

Основные теги, которые используются в тексте

はじめから=Сначала ;изменить цвет текста
マウスホイールで\n文字送り=Переключать колесиком \nмыши ;отступ на следующую строку
つづきから= Продолжить ;изменить размер текста

Это основное, более полный набор тегов смотрите здесь

Не закрывая игру, редактируйте текст и сохраните изменения. Что бы посмотреть как в самой игре изменится текст, переведите клавиатуру на английскую раскладку и нажмите Alt+R и программа автоматически перезагрузится.

Всякие фразы с тегами диип плохо переводит, поэтому рекомендую их удалять когда на сайте переводите.

Текстуры(изображения) находятся здесь \AutoTranslator\Translation\ru\Texture их через фотошоп редактируете, и заменяете в той папке.

Пункт меню сразу все программа не переводит, то есть если несколько вариантов выбора, то вам нужно будет каждый выбор пройти и перевести, что достаточно муторно.

4. Перевод повторяющихся символов или ввод имени.
Когда вам попадется ввод имени, оставляете имя по умолчанию,

Далее вам нужно будет зайти \AutoTranslator\Translation\ru\Text\_Substitutions.txt и записать там имя по умолчанию, или слово что постоянно повторяется.

日目= День
好感度=Симпатия

И когда вы будете дальше листать игру, и где вам пападутся эти слова, в файле _AutoGeneratedTranslations.txt вместо

01 日目 =01 день
будет
01<>=01<>

И когда игрок введет свое имя, ваш перевод сохранится.

У кого квадратики вместо теста скачайте TextMeshPro с кирилицей для версии юнити что в игре

Надеюсь что кому-нибудь помог с переводом игр юнити.

Локализация игр на Unity и Unreal Engine

Для того чтобы успешно локализовать игру, нужно учесть огромное количество аспектов (о некоторых из них можно почитать, например, здесь [ссылка удалена модератором] ). В том числе имеет значение и то, на каком движке создан проект. Мы решили углубиться в тему и рассказать об особенностях локализации игр на двух самых популярных движках: Unity и Unreal Engine.

Локализация игры на Unity

Самый простой способ вставить текст в игру на движке Unity — прописать его в свойствах соответствующего объекта интерфейса. Например, когда мы создаем кнопку, вместе с ней автоматически генерируется связанный текстовый объект. После этого мы можем задать нужный нам текст («Next» на рисунке ниже), и вуаля — он тут же окажется на самой кнопке.

Этот текст хранится внутри файла сцены (Unity scene file с расширением .unity). Если наша кнопка никогда не будет меняться, то на этом можно остановиться. А что, если мы хотим, чтобы текст на кнопке менялся в зависимости от определенных условий? Скажем, мы решили локализовать игру. Значит, перевод всех текстовых элементов, выведенных на экран, при необходимости должен мгновенно переключаться.

Нет, нам не нужно вручную создавать десятки новых кнопок, табличек и плашек для каждого языка — ведь можно просто связать каждый текстовый элемент интерфейса с текстовым файлом, содержащим нужные фразы. Такие файлы называются словарями. Игра просто будет подгружать из нужного словаря нужный текст на нужном языке. Unity поддерживает разные текстовые форматы: .txt, .csv, .xliff, .json, .po и т. д.

И все-таки придется хорошенько попрограммировать, написав в коде игры:

  • функцию, задающую язык;
  • функцию, загружающую в память устройства текст из словаря;
  • функцию, преобразующую загруженный текст в понятный для Unity вид;
  • функцию, вставляющую переведенный текст в интерфейс игры;
  • менеджер локализации — сценарий, устанавливающий связь между словарями и текстовыми объектами сцены;
  • менеджер загрузки, задача которого — дождаться, пока сработает менеджер локализации (т. е. игрок выберет язык), после чего загрузить новую сцену.

И еще чуть-чуть поработать руками:

  • привязать менеджер локализации к каждому локализуемому текстовому объекту;
  • назначить каждому текстовому объекту сценарий, который получает ключ нужного текста и вставляет локализованный текст в поле «Text».

Сложно? Не спорим. К счастью, недавно в Unity появился свой инструмент для локализации с говорящим названием Localization (он был и раньше, но на стадию пререлиза перешел только в апреле 2021 года; да и сейчас все еще сырой, судя по обилию баг-репортов на форуме техподдержки). Он автоматизирует большинство необходимых действий, позволяя задавать локали и в зависимости от них воспроизводить звуки и выводить на экран разные строки и рисунки. А еще он делает «псевдолокализацию», т. е. машинный перевод, чтобы можно было оценить, как будет выглядеть интерфейс в той или иной локали. С помощью Localization можно также экспортировать данные не только в текстовые файлы, но и в Google Sheets.

Впрочем, гораздо раньше стандартного инструмента появились разнообразные сторонние плагины, позволяющие управлять локализацией на проекте. Например, плагин I2 Localization компании Inter Illusion. Функционал примерно такой же, как и у стандартного:

  • поддержка Google Translate;
  • автоматический поиск отсутствующих, дублирующихся или неиспользуемых переводов;
  • поддержка множественного числа;
  • поддержка RTL (right-to-left) языков: арабского, иврита и т. п.;
  • локализация нетекстовых объектов (рисунок или аудиофайл может меняться в зависимости от языка);
  • управление шрифтами и текстурами (их можно задать объекту в зависимости от языка).

Стоит 45 долларов.

Что ж, с языками разобрались. Однако текст в игре — это не только смысл слов, но и их облик. О внешней красоте в данном случае стоит позаботиться не меньше, чем о внутренней.

UI Text, стандартный инструмент Unity для работы с текстом, очень простой и не имеет возможностей по созданию визуальных эффектов текста (динамических отражений, объемных теней и т. п.). Зато для этого можно использовать плагин TextMesh Pro, разработанный компанией Digital Native Studios. Он генерирует объемную сетку, позволяющую применять к тексту разнообразные эффекты и даже создавать анимацию. Плагин оказался очень удачным, поэтому корпорация Unity его приобрела и бесплатно поставляет в комплекте с основным редактором с версии 2018.

Локализация игры на Unreal Engine

В Unreal Engine проблемы локализации решены гораздо основательнее, чем в Unity. Здесь уже давно существует стандартный инструмент локализации, поэтому в сторонних плагинах нет большой необходимости.

Стоит отметить, что в Unreal Engine разделяются понятия локализации (адаптация игры к конкретному региону или языку путем перевода текста и добавления специфичных для локали компонентов) и интернационализации (разработка игры таким образом, чтобы она легко адаптировалась к разным языкам без изменений ее архитектуры).

Локализация в Unreal построена вокруг особого типа данных — FText, а интернационализация использует библиотеку ICU (International Components for Unicode).

Культурой (culture) в Unreal называется свод правил оформления текста, принятых в соответствующем регионе. К ним относятся правила:

  • обработки цифр и спецсимволов (знаки валют, процентов, десятичные разделители и т. п.);
  • форматирования даты и времени;
  • передачи множественного числа.

Культура обозначается кодом, состоящим из одной-трех частей:

  • обязательный двузначный буквенный код по стандарту ISO 639-1 (например, zh);
  • дополнительный четырехзначный буквенный код по стандарту ISO 15924 (например, Hans);
  • дополнительный двузначный код страны по стандарту ISO 3166-1 (например, CN).

Пример: zh-Hans-CN. Здесь zh — китайский язык, Hans — Hànyǔ Simplified (ханьюй упрощенный), а CN указывает на вариант китайского языка, используемый в КНР.

Библиотека ICU (англ. International Components for Unicode, «международные компоненты для стандарта Unicode»):

  • запрашивает у операционной системы, какую культуру использовать;
  • распознает нужное направление текста;
  • выполняет анализ внутренних ограничений в тексте (например, перенос строк).

Объектами локализации в Unreal могут быть текст (собственно текст и шрифт), текстуры, аудио- и видеофайлы, кат-сцены, порядок следования сцен, анимация.

Интерфейс локализации в Unreal представлен «панелью локализации» — Localization Dashboard.

Единицей локализации служат Localization Targets — модули, содержащие локализационные данные. Они содержат текст из указанных источников, хранятся в файле манифеста и переводятся в архивных файлах для каждой культуры. Модули собираются в файлы ресурсов локализации для каждой культуры, которые и отображаются игрой. Принцип локализации выглядит примерно так:

Да, как и в Unity, локализация здесь — дело непростое.

Типовой порядок локализации в Unreal:

  • Добавляем в проект очередной текстовый элемент (кнопка с надписью, плашка и т. п.).
  • Добавляем в проект список культур, для которых будет выполняться локализация (en-US, ru-RU и т. п.).
  • Собираем локализуемые текстовые элементы в систему локализации.
  • Для каждого текстового элемента интерфейса в Unreal создается объект FText. FText — не просто строка с текстом. Этот объект имеет специальную структуру, поддерживающую смену культуры на ходу. При создании FText и установке параметра «Localizable» = «Yes» (по умолчанию) текстовому элементу присваивается ключ вида «9567B129548DD2468752BA0F5». Этот ключ служит для идентификации текстового элемента при локализации.

  • Система локализации Unreal составляет список локализуемых объектов FText этого проекта.
  • Экспортируем локализуемые элементы интерфейса в виде файлов формата .po, переводим их и импортируем обратно.

А как в Unreal обстоят дела с визуальными эффектами текста? В 2019 году движок получил плагин Text 3D, с помощью которого можно создавать вот такие шедевры:

Text 3D поддерживает такие настройки шрифта, как объемные тени, фаски, скругления символов, изменение расстояния между символами, словами и строками, сохранение пропорций при изменении масштаба, выравнивание текста по горизонтали и вертикали, применение различных шрифтов, создание побуквенной анимации, изменение анимированного текста прямо во время игры и многое другое. Смущает лишь одно: по состоянию на 2022 год Text 3D еще находится в стадии бета-тестирования, и неизвестно, какие из его возможностей доживут до финальной версии.

Если вам интересны особенности работы с текстом в других игровых движках, напишите нам [ссылка удалена модератором] , и мы подготовим обзор инструментов.

  • Разработка игр
  • Unity
  • Локализация продуктов
  • Unreal Engine

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *