Рано чи пізно нехай навіть невеликий успішний проект вам захочеться показати не тільки своїм друзям, але і більш широкій публіці з інших країн. Для того, щоб все більше і більше людей перейнялися вашої «геніальною» ідеєю, необхідно здійснити переклад всіх текстових написів і підписів на зрозумілу мову його «нативних» мешканців.
У статті покажу як можна досить швидко написати свій менеджер локалізації, паралельно зробимо нескладне головне меню і меню вибору мови на 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.
В скрипті при запуску визначаємо завантажений файл локалізації, якщо ще немає, то довантажувати.
Візуалізація всіх елементів меню здійснюється всередині функції «OnGUI».
«ScreenX» і «ScreenY» - координати лівого верхнього кута області, де буде починатися меню;
«AreaWidth» і «areaHeight» - розміри області, ширина і висота;
«CurrentPage» - змінна власного типу «Page», використовується для визначення «в якому меню ми знаходимося».
Безпосередньо функція створення самих кнопок в головному меню. Всередині можна дописати свої власні обробники натискань, наприклад, завантаження рівня або нового меню.
Для кожної мови буде свій власний шрифт, тому оголошуємо відповідні змінні:
Призначаємо кожної змінної бажаний шрифт:
Меню вибору мови:
Зберігаємо, тиснемо «Play».
У мене вийшло таке головне меню і меню вибору мови (російський варіант):
В кінцевому підсумку, отримуємо привабливу картинку, яку при бажанні можна роздрукувати і повісити на стіну:
альтернативи
У Unity Asset Store є цілком придатні для використання напрацювання (у вигляді розширення для Unity3D). І навіть зі спеціальним розділом Editor
Якщо, купувати офіційно, то можна поглянути на:
висновок
Бажання, трошки терпіння і все готово!
UPD: Усунуто недоробки, враховані побажання хабрапользователей
1) був знищений Індуський-код;
2) додані нові шрифти, в тому числі для кирилиці.
Усім учасникам в дискусій, а також HomoLuden. Gafs. - спасибі за ваші цілком обґрунтовані зауваження та пропозиції!