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