Туторіал по локалізації меню на unity3d

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

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

Саме так будуть виглядати локалізоване головне меню на 3 мовах в підсумковому варіанті:

Туторіал по локалізації меню на unity3d

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

базові приготування

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

Туторіал по локалізації меню на unity3d

Створюємо файл локалізації

Є кілька варіантів організації та зберігання даних локалізації:

Мономовного зберігання - дані (текст, діалоги, назви ваших аудіо-файлів, і т.д.) будуть міститися в кожному окремому файлі, наприклад, російський в 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.

В скрипті при запуску визначаємо завантажений файл локалізації, якщо ще немає, то довантажувати.

Візуалізація всіх елементів меню здійснюється всередині функції «OnGUI».

«ScreenX» і «ScreenY» - координати лівого верхнього кута області, де буде починатися меню;
«AreaWidth» і «areaHeight» - розміри області, ширина і висота;
«CurrentPage» - змінна власного типу «Page», використовується для визначення «в якому меню ми знаходимося».

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

Для кожної мови буде свій власний шрифт, тому оголошуємо відповідні змінні:

Призначаємо кожної змінної бажаний шрифт:

Меню вибору мови:

Зберігаємо, тиснемо «Play».

У мене вийшло таке головне меню і меню вибору мови (російський варіант):

Туторіал по локалізації меню на unity3d

В кінцевому підсумку, отримуємо привабливу картинку, яку при бажанні можна роздрукувати і повісити на стіну:

Туторіал по локалізації меню на unity3d

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

У Unity Asset Store є цілком придатні для використання напрацювання (у вигляді розширення для Unity3D). І навіть зі спеціальним розділом Editor

Якщо, купувати офіційно, то можна поглянути на:

висновок

Бажання, трошки терпіння і все готово!

Туторіал по локалізації меню на unity3d

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

1) був знищений Індуський-код;
2) додані нові шрифти, в тому числі для кирилиці.

Усім учасникам в дискусій, а також HomoLuden. Gafs. - спасибі за ваші цілком обґрунтовані зауваження та пропозиції!