Игры и их разработка. Чем могу поделиться при разработке мультиязычности с Unity3D
Умение писать программы тренирует ваш разум и помогает мыслить лучше, создавая способ мышления, полезный, на мой взгляд, во всех областях.Моя игра по ссылке в GooglePlay:
Билл Гейтс, основатель Microsoft
Буду благодарен оценкам и отзывам в самом Маркете, а также попробую ответить на все вопросы в комментариях под постом.
А теперь к самому интересному:
Для начала создадим наши словари, которые будут хранить переводы с разных языков для игры.
Я создал через обычный текстовый документ, сохранил и просто переименовал с формата .txt в формат .json
У кого нет полного расширения имени файла, тогда идём в «Вид», ставим галочку на «Расширения имён файлов».
Предупреждаю! Может возникнуть потом проблема с кодированием текста. Поэтому можно сразу скачать и воспользоваться программой Notepad++ и поставить правильную кодировку в UTF-8.
Сохраняем в проекте Unity3D таким образом:
Assets\StreamingAssets\Languages\
Подписываем так как вам угодно, так как загружать потом их вам, я решил так:
Как заполняется словарь:
Открываем фигурные скобки, так требуется для работы с .json
Потом задаём ключ, у меня это “mainmenu”, потом двоеточие и записываем значения.
Всё пишется в скобках и ставим запятую, после последнего значения запятая не ставиться!!!
Аналогично создаём русский словарь. Переводимые значения должны строго соблюдаться по порядку, что бы не было проблем с переводом, к примеру, где в EN текст стоит «No», в русском будет стоять «Старт».
Создадим теперь скрипт, который будет загружать наши словари, в зависимости от того, какой язык будет выбран пользователем. Сам скрипт должен присутствовать в сцене, так как он загружает текст, можно его прикрепить к любому объекту в сцене, я создал отдельный пустой объект для этого.
Для начала создадим отдельный класс GlobalLang который будет считывать ключ и его значения.
Дальше объявим переменные и напишем метод LangLoad который и будет загружать сохранённый язык.
Для начала проверим андроид устройство или нет. Так как чтение файла на андроид девайсах отличается от обычной загрузки, это можно найти в оф документации Unity.
В общих чертах мы заходим в папку, где наши словари, дальше загружаем сохранённые данные об языке, они совпадают с названием файлов с текстом, после добавляем расширение файла. Дальше мы просто в переменную вытаскиваем текст из файла.
Дальше у нас в Awake происходит загрузка данных до появления сцены, делается для того, чтобы у нас не подгружались данные во время сцены.
Я сделал окно с выбором языка, как только пользователь запускает первый раз игру, что бы потом можно было выгружать в “Language” название самого файла, выглядит это так:
Сам скрипт выглядит так:
В старте идёт проверка на показ выбора языка, дальше кнопки с выбором и сохранением языка для выгрузки текста из словарей.
Загрузка словаря по индексу выглядит так:
Тут создаётся скрипт, который потом будет добавляется к тексту, который мне надо переводить.
Тут присутствует переменная индекса значения из словаря.
Метод TextMenu который ищет значение в полученном тексте из файла, загружает и показывает его.
Ну и соответственно, что бы этот текст сразу был показан, пишу метод TextMenu в старте сцены.
В дальнейшем, при смене языка надо будет просто вызвать метод TextMenu что бы обновить текст уже с другого словаря по индексу.
Думаю как добавлять ивенты к кнопкам в Unity расписывать не стоит.
Что в итоге:
Сами словари универсальные, его можно отдать переводчику на дополнительный язык, после чего добавить кнопку с другим языком, к примеру Немецкий, добавить новую кнопу с сохранением языка и всё будет работать, только надо убедиться что язык поддерживается вами выбранным шрифтом.
Всё просто и универсально!
Ваше мнение и может дополнительная информация по данной теме будет очень приветствоваться в комментариях.
Сильно меня не хаить, я пока ещё не очень опытный С# да и программист в общем. Поэтому учту изменения в коде.
Лига Разработчиков Видеоигр
6.8K постов22.2K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"