Перейти к содержимому

Как перевести игру на unity на русский язык

  • автор:

Русификатор для любой игры сделанной на движке 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 «Простая система перевода игры на другие языки»

Данная система подойдет для начинающих разработчиков или инди разработчиков. Данной решение не идеальное. Оно создавалось для простой hyper casual. Для визуальных новел или какой-нибудь RPG оно конечно же не подойдет.

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

Начнем со списка языков. Для удобства выбора языка в редакторе Unity я решил воспользоваться перечислением.

public enum EnumLanguage < en = 0, ru = 1 >

Следующий скрипт я наследовал от Scriptable Object. Сделано это для использования его в скриптах как объект, который хранит выбранный язык интерфейса.

Так же он содержит метод изменения выбранного языка на другой (ChangeLanguage).

using System; using UnityEngine; [CreateAssetMenu(fileName = «Current Language», menuName = «MyTools/Language System/Current Language», order = 2)] public class CurrentLanguage : ScriptableObject < [SerializeField] private EnumLanguage language; private int countLanguage; public EnumLanguage Language =>language; private void OnEnable() < countLanguage = Enum.GetNames(typeof(EnumLanguage)).Length - 1; >public void ChangeLanguage() < language++; if (((int)language) >countLanguage) language = 0; > >

Следующий скрипт. Скрипт предназначен для хранения строк на разных языках.

using UnityEngine; [CreateAssetMenu(fileName = «Translation String», menuName = «MyTools/Language System/Translation String», order = 1)] public class TranslationString : ScriptableObject < [SerializeField] string[] strs; public string[] Strs =>strs; >

Последний скрипт, который понадобится, это скрипт изменения текста на интерфейсе.

Данный скрипт работает с только TextMeshPro. Если у вас в проекте обычный Text или какой-то еще. Тогда надо по подобию написать скрипт для вашего компонента интерфейса.

В этом скрипте используется событие onChangeLanguage, которое находится в статическом классе EventsManager. Вы можете добавить это событие туда, где будет удобно вам. Главное, чтобы к нему был общий доступ. Затем, вы можете вызывать его где угодно. Например при нажатии на кнопку сменить язык.

public static UnityEvent onChangeLanguage = new UnityEvent();

Попробуем использовать данную систему.

Создаем CurrentLanguage объект и выбираем язык, который будет установлен при старте игры.

Далее создаем несколько объектов TranslationString. Прописываем текст по соответствию языка.

Далее добавляем на объект, который содержит Text Mesh Pro — скрипт SetTextMeshProLanguage. И выбираем для него подходящий объект TranslationString.

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

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

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

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

Как осуществить перевод языка в приложении на android в Unity на C#?

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

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Translate : MonoBehaviour < public Text Text; public string ENG_Version; public string BEL_Version; bool eng; bool bel; void OnMouseUpAsButton () < GameObject.Find ("Click Audio").GetComponent ().Play (); switch (gameObject.name) < case "ENG": eng = true; bel = false; break; case "BEL": eng = false; bel = true; break; >> void Update () < LocalThisText(); >void LocalThisText () < if (bel == true && eng == false) < Text.text = BEL_Version; >else if (eng == true && bel == false) < Text.text = ENG_Version; >> > 

Отслеживать
задан 23 фев 2019 в 16:49
29 5 5 бронзовых знаков

А объясните, пожалуйста, иерархию. На чём висит этот скрипт? Что вызывает метод OnMouseUpAsButton? Где вы ожидаете изменений языка.

23 фев 2019 в 18:15

метод OnMouseUpAsButton вызывает нажатие на клавишу, т.е. когда человек нажимает на кнопку «ENG», то становится английский язык, а если на кнопку «BEL» — белорусский язык. Скрипт прикрепляется к объекту с текстом и к кнопке с названием языка, на который хотят поменять.

23 фев 2019 в 18:38
А текст у них случайно не один на обе кнопки?
23 фев 2019 в 19:47

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

23 фев 2019 в 20:04

1.Ну ок ,ты сравниваешь по gameObject.name, но после клика по кнопке, а значит смене языка, ты имя gameObject.name не меняешь. 2. Не по теме, но это не правильный способ локализации, поищи либы или погугли как реализовать локализацию, а что если будет 50 языков, для всех case будешь создавать!?

Как поставить русский язык в Unity 3D

Новые пользователи, которым не очень привычно видеть интерфейс Юнити на английском, желая перевести его на «Русский язык». Можно попытаться найти кряк программы, для корректировки платформы, но сразу стоит огорчиться. Большинство источником, которые желают помочь в поиске такого решения, нацелены на распространение рекламы своих же ресурсов. По сути, часть сайтов, в сети Интернет, заполнена бесплатными предложениями ключей для русификации Юнити, но все они наполнены вирусной начинкой и пользы для пользователя не принесут. Единственным остаётся для рассмотрения Unity Web Player, в котором есть встроенный, на уровне с остальными языками, русский язык.

Характеристика Unity Web Player

UWP по-новому

Для удобства в просмотре 3D график онлайн игр, созданных на движке Юнити, был разработано браузерное расширение в виде Веб плеера. Данный плагин станет превосходным дополнением для увеличения потенциала и функциональных возможностей браузера. Плеер позволит совершать запуск популярных игр не выходя с Веб-обозревателя.

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

Браузерная игра при поддержке UWP

До-недавно, Unity Web, поддерживался всеми браузерами без исключения, но в связи с изменениями от компании Google, было отказано в сотрудничестве. Поддержка осталась в браузерах:

  • Internet Explorer;
  • Mozilla Firefox;
  • Safari;
  • Opera.

Так как Юнити предоставляет замечательный контент для создания проектов, с анимированными персонажами, превосходной графикой и другими захватывающими эффектами, то от ПК требуется не малое количество ресурсов, которых вероятно не хватит для полноценной работы с характерным содержанием технологии рендеринга. Для этого Web Player, после первого игрового запуска, кеширует все файлы на винчестере, что позволяет игроку не тратить время на ожидание запуска, а также избавляет от непредвиденных ошибок, например при запуске установленной игры с ПК.

Что делать если Unity Player не работает

UWP не загружается

Потенциал

  • Плеер способен запускать различные приложения, созданные в среде Юнити;
  • Поддержка 3Д игр и объёмная визуализация, плюс внедрено простую реализацию интерфейса с удобным управлением;
  • Имеется функция фонового режима интеграции с Mozilla и Internet Explorer;
  • Совместимость ОС Windows и Mac OS с периодическими обновлениями официального сайта;
  • Не долгий процесс установки на бесплатных засадах.
Преимущества Недостатки
Работа на фоновом режиме в стандартных, автоматических, настройках;

Плеер имеет конфигурации ко всем популярным браузерам, кроме Chrome;

ПО занимает мало места на жестком диске;

Большие требования к аппаратной части;

Технические показатели

Unity графика

Обязательно перед установкой рекомендуется проверить показатели ПК:

Версия сборки: 5.3.6.0
Лицензия: Бесплатно
Язык интерфейс: Русский
Компания разработки: Unity Technologies
Совместимость ОС: Windows 7, 8, 8.1, 10, XP, Vista

Теперь, что бы ни устанавливать любимые игры на компьютер, можно запустить их в удобном окне вышеперечисленных браузеров и наслаждаться процессом в игровом мире предоставленным Unity 3D.

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

Мультиязычность среды разработки

Это не очень качественно и малодоходно с точки зрения больших компаний. Эффективнее будет распространение продукта на западные страны: США, Канаду, Австралию или ближний Запад. Но это всё имеет отношение к крупным поставщикам компьютерных игр.

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

Флаги стран мира

Установка мультиязычности

В примере, за язык будет отвечать класс Language.as – данный класс не имеет конструктора, константы и переменные будут статичными, что открывает доступ к нему с любого угла созданной игры:

О Unity

    • Объявляем константы, которые будут задействованы в роле ключей к текстам, например «New Game»:
      public static const NEW_GAME: String = « btn_newGame»
      Количество констант пропорционально количеству кнопок в проекте;
    • Для определения языка, который используется в заданный момент, проставляем статическую переменную:
      public static var current:String = «none»
      Пример показывает, что не какого языка не используется;
    • После этого прописываем статическую переменную Object, в ней будут храниться текста для выбора в игровом процессе:
      private static var _labels:Object = <>
    • Так как у такого типа класса нет конструктора, можно сразу переходить к созданию методов управляющих, например, английским языком:
      public static function setEnglish(): void
      < _labels[NEW_GAME] = «New Game»;
      current = «eng»; >
    • В данном случае используется объект _labels, он выступает контроллером для сохранения текста. Представлена выше константа, определяет ячейку, в которой хранится соответствующий текст.
    • Для других видов языка, например русского, используется иное наполнение ячеек:
      public static function setRussian(): void
      < _labels[NEW_GAME] = «Новая Игра »;
      current = «rus»; >
    • Здесь то же самое, что и для английской раскладки. В зависимости от выбранного количества поддержующих видов языков в игре, таких методов может быть несколько.
    • Метод отображения выбранного текста:
      public static function getText (id:String) :String
    • Прописав данный параметр, пользователь задаёт тексту ключ, который нужно определить, в результате выводим строку ключа, язык которого был загружен в _labels.

Сделано в Unity

Мультиязычность задана, её можно смело принимать на вооружение в программировании собственных программ.

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

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