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

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

  • автор:

Локализация игр на 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 разделяются понятия локализации (адаптация игры к конкретному региону или языку путем перевода текста и добавления специфичных для локали компонентов) и интернационализации (разработка игры таким образом, чтобы она легко адаптировалась к разным языкам без изменений ее архитектуры).

Локализация игр на 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

Вопрос Как мне перевести игру на Unity

Всем привет! Я хочу перевести игру Lethal Company. но при просмотре dnSpy я нашел и перевел лишь часть (маленькую часть) подсказок. Я даже меню перевести не могу так как не нашел отвечающие за текст переменные.
Может я что то делаю не так? Прошу помощи (в инете мало информации по переводу игр, ну или я болбес)

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

Локализация игр при помощи ChatGPT — недорого и качественно. Гайд

Идея о том, чтобы делать локализацию для разрабатываемых игр при помощи Google Translate, Deepl, или любого другого электронного переводчика, не нова — машинный перевод обходится в разы дешевле, чем работа специалистов, и делается гораздо быстрее.

Однако, его слабость очевидна — перевод всегда пестрит изъянами, неточностями, и в целом — углепластиком.

Старая пиратская локализация Grand Theft Auto: San Andreas

Крылатые выражения, сленговые фразочки — современный Google Translate хоть и может их перевести, но он всё равно не сможет правильно вписать их в контекст вашего сценария/интерфейса игры.

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

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

Небольшая проверка строк, на которых Google обычно лажает. Без контекста.

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

  1. Нам нужна таблица!
  2. Устанавливаем расширение и настраиваем OpenAPI ключ
  3. Переводим! — Базовая формула
  4. Переводим круче — Задаём контекст
  5. Стоимость и качество
  6. Итог

1 — Нам нужна таблица!

В целом, метод может быть использован с любой системой локализации, или даже без неё — закидывайте фразы в ChatGPT вручную, и спрашивайте перевод — получится неплохо.

Но мы здесь говорим об удобном, системном, и не сильно сложном способе — поэтому работать будем с Google Sheets.

Большинство движков, поддерживающих локализацию, с большой вероятностью поддерживают и экспорт всех данных перевода в таблицу. Вот ищите эту фичу у своего движка, и закидывайте полученные данные на гуглодиск.

В Unity, с пакетом Unity Localization, таблицу можно экспортировать сразу в Google Sheets при помощи специальной опции:

2 — Устанавливаем расширение и настаиваем ключ

Если ваша таблица локализации уже готова, то следующий этап — установка расширения для Google Sheets, которое будет связываться с OpenAI API, и запрашивать перевод ваших данных.

Тут ничего сложного — просто переходим по ссылке (Google Workspace Marketplace), и нажимаем — «Установить».

После чего идём к нашей таблице в Google Sheets -> Расширения -> GPT for Sheets and Docs -> Set API key

Если у вас нет аккаунта OpenAI — заводим оный. Но понадобится номер телефона не из РФ.

Ключ засовываем в предназначенное для него поле:

Когда всё будет готово — жмём «Save API key».

Дальше идём в Расширения -> GPT for Sheets and Docs -> Enable GPT functions, и на этом менюшку можно закрывать. ��

3 — Переводим! — Базовая формула

Бозовый принцип в следующем — взять клетку, положить в неё формулу, и растянуть до самого низа вашей таблицы. Всё.

Сама формула следующая:

  • — наименование языка в любом формате. Я обычно пишу «en»(Английский), «zh‑CH»(Китайский урощённый) и т. д.
  • — то же самое, что и выше, но здесь указываем наименование языка оригинального текста.
  • — контекст запроса на перевод, о нём в следующем блоке.

В собранном виде выглядит так:

=GPT_TRANSLATE(A1; «zh-CN»; «en»; «Text from medieval Action-RPG game localization table»)

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

4 — Переводим круче — Задаём контекст

Сейчас перевод уже будет лучше, чем перевод из Google Translate. Но мы ещё даже не задействовали поле нашей формулы.

Сделайте отдельную ячейку где‑нибудь на задворках, и напишите туда общий контекст вашей игры. Что‑то вроде «Это таблица локализации игры в жанре Стратегия, в которой игрок — вечно пьяный и злой генерал Иван Иваныч. Он сражается против армии Эдуарда Рафаэлло — добродушного мужчины с итальянским акцентом».

И можете скормить адрес этой ячейки в нашу формулу, на место — нейросеть начнёт учитывать контекст вашей игры при переводе. Она будет понимать, что опечатки в речи Ивана Иваныча — это не ошибки, а пародирование речи пьяного человека, а Эдуард — итальянец.

Если для вашего проекта это важно, то можете дописать «Если в оригинальном тексте есть рифма, то постарайся соблюсти её и в переводе» — но результат будет, конечно, хуже, потому что ChatGPT хоть и хороший инструмент, но не магический.

Но и на этом всё не заканчивается, потому что в контекст также можно включить комментарии к ключам. Знаю, что вообще не у всех инди-разработчиков есть колонка с комментариями, но для больших проектов, локализация которых идёт на аутсорс, колонка с комментариями почти всегда присутствует:

И теперь, если у строки есть комментарий, нейросеть также будет учитывать и его! Это позволит нам добиться ещё большего качества перевода.

5 — Стоимость и качество

Итого, на перевод 3000 строк с английского на упр. китайский с помощью ChatGPT было потрачено не больше 5$, тогда как студия по локализации запросила >500$. На самом деле мы и отдали $500 баксов, потому что на тот момент я не додумался о переводе через ChatGPT ��

По качеству перевод через нейросеть, безусловно, уступал переводу от студии. Но разница была не на уровне «Небо и земля».

Если перевод от студии получился хороший со знаком плюс, то перевод от ChatGPT получился просто приемлимым, а также понадобилась пара часов на довольно банальные правки, которых было штук 30 на весь столбец из 3000 строк. И без которых всё в том числе выглядело бы нормально.

Если большие и средние студии разработки могут позволить себе большие траты на перевод, то товарищи индюки, на которых вся индустрия по сути и держится — нет.
И я считаю, что получаемое качество перевода с помощью нейронки — очень даже оправдывает затраты на токены OpenAI. $5 против $500 — разница в 100 раз, конечно оправдывает блин!

6 — Итог

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

Надеюсь, что я помог кому‑то с успехом его будущего проекта. ��

Если у вас есть какие-то вопросы, или нужна помощь — я всегда рад помочь. Обращайтесь!

Мой телеграм-канал, в котором могут быть дополнительные материалы и новости по теме статьи.

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

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