Как поменять язык в unity

Как поменять язык в unity

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

Такое мнение относительно C# в Unity — не пустой слух. Помимо того, что это относительно простой и производительный язык программирования, есть и исключительно аппаратная причина. Unity использует open-source проект Mono, который является одной из многочисленных реализаций платформы Microsoft. NET. По факту, все библиотеки Unity написаны на C#.

Так что использовать все возможности платформы, не зная C#, у вас не получится. Но это не означает, что нельзя ограничиться базовым уровнем языка. Напротив, движок Unity тем и хорош, что здесь основными могут быть несколько языков — в зависимости от задач и разработчика. Но C# необходим. К счастью, его довольно легко изучить, а применять можно далеко за пределами Unity.

JavaScript

UnityScript был вторым базовым языком платформы. Вы можете убедиться в этом, открыв описания скриптов, где коды даны как на C#, так и на UnityScript. Если вам знаком и симпатичен синтаксис JavaScript — вам понравится работать с Unity.

Но будет ошибкой полагать, что UnityScript — это тот же JavaScript, но с другим названием. К примеру, US поддерживает классы, но при этом в нем нельзя переназначать переменные и использовать необязательные точки с запятой.

Плохая новость в том, что с лета 2017 года разработчики усиленно искореняют UnityScript из платформы. Это не ограничивается прекращением поддержки в оболочке — создатели пакетов со скриптами получают предупреждения о необходимости перевести весь код в C#.

К счастью, есть компилятор на GitHub, который все еще позволяет работать с JavaScript в Unity, и эту лазейку никто не собирается закрывать. Но удовольствие определенно потеряно.

Продолжая тему языков, от которых отказались разработчики Unity, вспомним Boo. По структуре он похож на Python, прост в освоении, у него краткий и удобный синтаксис, который поддерживается .NET и Mono. В Unity он появился благодаря одному из создателей платформы — Родриго Де Оливейре, который также разработал Boo.

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

IronPython и IronRuby

Для любителей Python все же есть возможность поработать с Unity. Решение — IronPython, набор библиотек, расположенных в GitHub. Позволяет запускать «змеиные» скрипты прямо из C#-кода. Полезное расширение — возможность вызывать .NET-библиотеки из Python.

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

Lua не входит в топ самых популярных языков программирования. Но он обитает преимущественно в играх, так что в Unity должен быть представлен. За это отвечает MoonSharp — интерпретатор для Mono, платформы .NET и Unity. MoonSharp не заменяет C#, а дает разработчику возможность подключить сторонний код на Lua. Такой принцип реализован, к примеру, в WoW, где огромное количество модов написано именно на Lua.

Как и в подавляющем большинстве продуктов, где требуется быстродействие, определенный фронт работ поручают C или C++. Unity не требует установки дополнительных надстроек или подключения библиотек, здесь «из коробки» можно создавать DLL-плагины.

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

Чтобы повысить скорость обработки информации, в Unity можно использовать другой язык — Rust. Функции и методы напрямую писать не получится, но их можно вызвать из Unity-кода. Пик популярности Rust позади, но, по свежим рейтингам, до 1,5 % программистов периодически используют его в работе. И им эта функция Unity наверняка придется по душе.

Читайте также:  Ионообменник в посудомоечной машине для чего

Как видите, несмотря на необходимость знать C# хотя бы на базовом уровне, Unity позволяет использовать еще несколько разношерстных языков. Если захотите разнообразить свою работу в гейм-дизайне, вы теперь знаете, как это сделать.

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

Такое мнение относительно C# в Unity — не пустой слух. Помимо того, что это относительно простой и производительный язык программирования, есть и исключительно аппаратная причина. Unity использует open-source проект Mono, который является одной из многочисленных реализаций платформы Microsoft. NET. По факту, все библиотеки Unity написаны на C#.

Так что использовать все возможности платформы, не зная C#, у вас не получится. Но это не означает, что нельзя ограничиться базовым уровнем языка. Напротив, движок Unity тем и хорош, что здесь основными могут быть несколько языков — в зависимости от задач и разработчика. Но C# необходим. К счастью, его довольно легко изучить, а применять можно далеко за пределами Unity.

JavaScript

UnityScript был вторым базовым языком платформы. Вы можете убедиться в этом, открыв описания скриптов, где коды даны как на C#, так и на UnityScript. Если вам знаком и симпатичен синтаксис JavaScript — вам понравится работать с Unity.

Но будет ошибкой полагать, что UnityScript — это тот же JavaScript, но с другим названием. К примеру, US поддерживает классы, но при этом в нем нельзя переназначать переменные и использовать необязательные точки с запятой.

Плохая новость в том, что с лета 2017 года разработчики усиленно искореняют UnityScript из платформы. Это не ограничивается прекращением поддержки в оболочке — создатели пакетов со скриптами получают предупреждения о необходимости перевести весь код в C#.

К счастью, есть компилятор на GitHub, который все еще позволяет работать с JavaScript в Unity, и эту лазейку никто не собирается закрывать. Но удовольствие определенно потеряно.

Продолжая тему языков, от которых отказались разработчики Unity, вспомним Boo. По структуре он похож на Python, прост в освоении, у него краткий и удобный синтаксис, который поддерживается .NET и Mono. В Unity он появился благодаря одному из создателей платформы — Родриго Де Оливейре, который также разработал Boo.

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

IronPython и IronRuby

Для любителей Python все же есть возможность поработать с Unity. Решение — IronPython, набор библиотек, расположенных в GitHub. Позволяет запускать «змеиные» скрипты прямо из C#-кода. Полезное расширение — возможность вызывать .NET-библиотеки из Python.

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

Lua не входит в топ самых популярных языков программирования. Но он обитает преимущественно в играх, так что в Unity должен быть представлен. За это отвечает MoonSharp — интерпретатор для Mono, платформы .NET и Unity. MoonSharp не заменяет C#, а дает разработчику возможность подключить сторонний код на Lua. Такой принцип реализован, к примеру, в WoW, где огромное количество модов написано именно на Lua.

Как и в подавляющем большинстве продуктов, где требуется быстродействие, определенный фронт работ поручают C или C++. Unity не требует установки дополнительных надстроек или подключения библиотек, здесь «из коробки» можно создавать DLL-плагины.

Читайте также:  Bdcamsetup что это за программа

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

Чтобы повысить скорость обработки информации, в Unity можно использовать другой язык — Rust. Функции и методы напрямую писать не получится, но их можно вызвать из Unity-кода. Пик популярности Rust позади, но, по свежим рейтингам, до 1,5 % программистов периодически используют его в работе. И им эта функция Unity наверняка придется по душе.

Как видите, несмотря на необходимость знать C# хотя бы на базовом уровне, Unity позволяет использовать еще несколько разношерстных языков. Если захотите разнообразить свою работу в гейм-дизайне, вы теперь знаете, как это сделать.

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

В статье покажу как можно достаточно быстро написать свой менеджер локализации, параллельно сделаем несложное главное меню и меню выбора языка на Unity. У нас выбор языков будет состоять из 3-х: английский, немецкий и, конечно, русский.

Именно так будут выглядеть локализованное главное меню на 3 языках в итоговом варианте:

Для разработки будем использовать Unity3D и C#.

Базовые приготовления

Для начала создадим проект в Unity, создадим сцену, состоящую из: камеры; пустого элемента «Menu» типа «Gameobject»; текстуры типа «GUITexture» с привязанной интересной картинкой, которая будет использована в качестве фона; пустой текстуры с логотипом «unity». Жмём «Play».

Создаем файл локализации

Есть несколько вариантов организации и хранения данных локализации:

Моноязычное хранение – данные (текст, диалоги, названия ваших аудио-файлов, и т.д.) будут содержаться в каждом отдельном файле, например, русский в Russian.xml, а какой-нибудь Chinese – соответственно в Chinese.xml

Мультиязычное хранение – тут все данные хранятся в одном файле, что называется «all in one». Кто-то, возможно, скажет, что неудобно хранить в одном файле, но для проектов с малым объемом локализуемых данных, это самое «оно».

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

Для хранения текстовых данных будем использовать наиболее подходящий для этого тип – XML.
Формат данных нашего xml-файла выглядит следующим образом:

Внутри элемента «meta» могут содержать общие данные вашего проекта, например, название, версию, данные для проверки оригинальности и целостности файла.
Элемент «group id» мы используем для названий главного меню, его также можно использовать для названия различных второстепенных меню, названий локаций, и т.д.
Элемент «string id», содержит те самые поля данных, которые должны быть локализованы.

Менеджер локализации

Теперь переходим непосредственно к созданию скриптов.

Создадим класс и скрипт «LangManager.cs», это и будет основной скрипт менеджера локализации.

Первое, свой тип данных. У нас, как было уже указано, будет 3 языка:

Соответственно, переменная и свойство для хранения текущего языка, по умолчанию будет английский:

Второе, это функция подзагрузки файла:

«LanguagesFileName» — переменная типа «string», путь к файлу локализации, например, LanguagesFileName = @"/Settings/Languages.xml"

Третье, функция получения локализованных данных, в зависимости от типа текущего языка. (Некоторые могут сказать, что не очень эффективно и следует использовать словари. Но, как говорится, «nobody cares»).

В случае отсутствия данных по запрашиваемому полю, будет показана надпись «not been translated».
Конечно же, каждый может добавить свои фирменные «плюшки». Итак, базовый менеджер локализации получен.

Создание и локализация меню

Первое, что делаем создаем скрипт и привязываем его к игровому объекту Menu.

Читайте также:  Lenovo p780 row прошивка

В скрипте при запуске определяем загружен ли файл локализации, если ещё нет, то подгружаем.

Рендеринг всех элементов меню осуществляется внутри функции «OnGUI».

«ScreenX» и «ScreenY» – координаты левого верхнего угла области, где будет начинаться меню;
«areaWidth» и «areaHeight» – размеры области, ширина и высота;
«currentPage» – переменная собственного типа «Page», используется для определения «в каком меню мы находимся».

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

Для каждого языка будет свой собственный шрифт, поэтому объявляем соотвествующие переменные:

Назначаем каждой переменной желаемый шрифт:

Меню выбора языка:

Сохраняем, жмём «Play».

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

В конечном итоге, получаем привлекательную картинку, которую при желании можно распечатать и повесить на стену:

Альтернативы

В Unity Asset Store есть вполне пригодные для использования наработки (в виде расширения для Unity3D). И даже со специальным разделом Editor

Если, покупать официально, то можно взглянуть на:

Заключение

Желание, немножко терпения и всё готово!

UPD: Устранены недоработки, учтены пожелания хабрапользователей

1) удален индуссо-код;
2) добавлены новые шрифты, в том числе для кириллицы.

Всем участвующим в дисскусии, а также HomoLuden, Gafs, — спасибо за ваши вполне обоснованные замечания и предложения!

Есть различные способы решения данной проблемы, тем не менее, предлагаем свой вариант. Возможно кому-нибудь данный способ пригодиться. Ориентирован он, кстати говоря, для смены языка интерфейса игры. Работает скрипт только с объектами Unity UI. Суть заключается в следующем. Например, при создании меню каких-то настроек, для описания ее элементов мы используем UI Text, каждый из которых в свою очередь, помещаем в специальный массив. То есть, мы можем выбрать, где язык будет меняться. А сами языковые пакеты, находятся во внешней папке, в этом собственно фишка. Иначе говоря, локализацию можно сделать, когда игра уже готова и скомпилирована. После запуска, все имеющиеся языки, станут доступны в отдельном меню.

Итак, у нас есть готовое меню или какой-нибудь интерфейс. Теперь в игру нужно встроить список Dropdown UI, добавляем его в нужное место и настраиваем внешний вид по вкусу. Далее, создаем в проекте папку с именем, например, Localization. Эта папка должна находится рядом со стандартной папкой проекта Assets, а после компиляции игры, ее нужно создать рядом с исполняемым файлом.

Вешаем на сцену скрипт Localization:

Указываем все необходимые элементы.

Дополнительно, создаем вспомогательный скрипт LocalizationEditor:

Он нужен для генерации файла-шаблона.

Как это работает?

Весь текст интерфейса создаем на "языке по умолчанию", допустим, английский. Когда всё готово и в массив скрипта добавленный все необходимые элементы, в инспекторе жмем кнопочку Build Default Locale:

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

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

Всё что нужно сделать это дублировать файл Default.xml переименовать допустим в Russian.xml и сделать перевод значений:

Сохраняем и готово! Теперь будут доступны два языка.

Ссылка на основную публикацию
Как пользоваться microsoft office access
Введение В современном мире человеку приходится сталкиваться с огромными массивами однородной информации. Эту информацию необходимо упорядочить каким-либо образом, обработать однотипными...
Как подключить вайфай к ноутбуку без провода
Сейчас многие научились сами настраивать сетевое оборудование. Это действительно нужно знать, ведь у каждого дома есть маршрутизатор. Поэтому давайте начнем...
Как подключить беспроводную мышь к компьютеру windows
Беспроводная мышь — это компактный манипулятор с поддержкой Wireless-соединения. В зависимости от используемого типа подключения может работать с компьютером или...
Как пользоваться steam link
Несколько лет назад американская компания Valve , знакомая многим по непотопляемому Steam и таким знаменитым сериям игр, как Half-Life, Team...
Adblock detector