В нашому розділі блогу ми будемо викладати статті на деякі теми, котрі можуть бути корисними для починаючих розробників ігор.
В цій статті ми розглянемо як в редакторі Unity відносно швидко зробити систему перекладу тексту.
По перше, нам потрібно інсталювати в Unity доповнення Localization. Для цього в запущеному редакторі переходимо в верхньому меню Windows - Package Manager. В менеджері в першому меню зверху треба обрати замість In Project пункт Unity Registryта в вікні пошука достатьно вбити Local як потрібне доповнення з'явиться. Його ми і інсталюємо.
Далі, нам потрібно налаштувати наш проєкт і додати до нього теки з перекладами. Для цього переходимо в Edit - Project Settings. Тут в списку зліва ми побачимо пункт Localization.
Через те, що в нас не буде ще ніяких налаштувань, тицяємо на Create і створюємо теку в Assets нашого проекту, на приклад - LocalSettings. Після цього, в томуж вікни ми додамо мови, котрі нам будуть потрібні в нашому проекті. Для цього клікаємо на Locale Generator та відмічаємо мови котрі нам потрібні.
Після цого тицяємо на Generate Locales. Нам запропонується створити теку для наших перекладів. Створюємо в середині нашого LocalSettings теку Locales.
Тепер, коли в нас є заготовка наших мов, треба відразу обрати мову, котра буде в нас стояти за замовченням. Для цього в розділі Specific Locale Selector, в Locale ID тицяємо на круглу іконку та в вспливаючому вікни обираємо мову, котру бажаємо виставити за замовченням.
Також виставимо основну мову в пункті Project Locale Identifier. Можна зачиняти це вікно і переходити до створення таблиці перекладів.
Йдемо в Window - Asset Manager - Localization Tables. В нас відкриється вікно таблці перекладів, де в нас ще нічого немає. Тицяємо на кнопці New Table Collection. Через те, що в нас поки що простий варіант додавання перекладів, ми будемо змінювати переклад лише для тексту, тож нижче, в пункті Type треба виставити параметр String Talbe Collection. Нижче додаємо ім'я нашої таблиці та тиснемо на Create. Нам буде запропановоно створити для цього теку, можна її створити в нашій LocalSettings.
Тепер в нас буде створена таблиця, де ми можемо додавати ключ для перекладу строки та текст перекладу.
Також, треба тицнути на кнопці зверху строки перекладу та переконатися, що в нас стоїть відмітка в пункті Preload All Tables
Далі, ми можемо додати будь який текстовий об'єкт в сцену, прибираємо будь який текст в ньому. Додаємо компонент Localize String Event. В пункті String Reference тицяємо та у вспливаючемо вікні обираємо ключ перекладу, котрий нам потрібен.
Трохи нижче, в Update String (String) тицяємо на плюсику, зліва, там де в нас None (Object), перетягуємо наш TextMeshPro, а справа, там де No Function, обираємо TextMeshProUGUI - text.
На цьому етапі, ми вже можемо спробувати запустити нашу гру, та побачити, що при перемиканні мови, в верхньому правому куту сцени, в нас зміниться переклад нашого текстового елементу.
Тепер зробимо перемикання мови при натисканні на певні кнопки в сцені, на приклад в попапі налаштувань, кнопки зміни мови.
Створимо скрипт, та назвемо його, на приклад, LocaleSelector, з наступним кодом:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Localization.Settings;
public class LocaleSelector : MonoBehaviour
{
private void Start()
{
int ID = PlayerPrefs.GetInt("LocaleKey", 0);
ChangeLocale(ID);
}
private bool active = false;
public void ChangeLocale(int localeID)
{
if (active == true)
return;
StartCoroutine(SetLocale(localeID));
}
private IEnumerator SetLocale(int _localeID)
{
active = true;
yield return LocalizationSettings.InitializationOperation;
LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[_localeID];
PlayerPrefs.SetInt("LocaleKey", _localeID);
active = false;
}
}
Тепер, в нашій ієрархії сцени створемо порожній об'єкт та назвемо LocalizationManager та перетягнемо у вікно інспектора менеджера наш скрипт.
Після цього переходимо до кнопки (елемент button), котрий буде відповідальним за вмикання певного перекладу. Обираємо кнопку, та додаємо обробник On Click () в Inspector.
Перетягуємо наш створений LocalizationManager до поля об'єкта, а в функції обираємо LocaleSelector - ChangeLocale(int)
Нижче нашого LocaleSelector є інпут для ввода айді мови, на котру буде перемикати ця кнопка. Якщо, для прикладу, ви додали дві мови - Англійську та Українську, та виставили Українську за замовченням, то її айді буде 0, а Английської - 1.
Все заберігаємо та запускаємо і перевіряємо роботу перемикання мови.
До речи, наш скрипт зберігає виставлену мову та завантажує гру з обраною раніше мовою, тож немає потреби весь час перемикатися.
Також слід відзначити, що таким чином можна не тільки текстові об'єкти перекладати а також написи кнопок, що також є текстом.