Всем привет, в этой статье я покажу вам как сделать локализацию вашей игры. Ведь наверно каждый хочет чтобы его игра была переведена на разные языки, чтобы каждый желающий из разных стран мог поиграть в ваш шедевр.
Я буду показывать на примере своего проекта. В нём есть уже готовый текст, и две кнопки, с помощью которых мы будем переключать язык с русского на английский. Но вы таким методом можете создавать куда больше языков для вашей игры.
Скрипт для текста
И для начала нам понадобится следующий скрипт, приведённый чуть ниже. Этот скрипт мы будем добавлять на любой UI текст, который мы будем локализировать.
using UnityEngine;
using UnityEngine.UI;
public class LanguageText : MonoBehaviour
{
public int language;
public string[] text;
private Text textLine;
void Start(){
language = PlayerPrefs.GetInt("language", language); //загружаем язык
textLine = GetComponent<Text>(); //обращаемся к компоненту
textLine.text = "" + text[language]; //указываем какой текст будет отображаться, в зависимости отвыбранного языка
}
}
Переменная language, это как код для нашего языка. Допустим число 0 - это будет русский язык, число 1 - это английский, и так далее. И ниже в инспекторе скрипта мы указываем количество наших языков, вписывая варианты текста в нужном порядке. Первый вариант на русском языке, второй на английском.
Теперь не важно что написано в верху в графе текста, а важно что написано ниже в нашем скрипте. И таким образом мы можем каждому тексту добавить свой вариант языка.
Главный скрипт
Дальше нужно создать главный скрипт, к которому мы будем обращаться для того, чтобы при нажатии на кнопки можно было поменять язык в вашей игре. Но в моём случае я воспользуюсь скриптом игрока, почему бы и нет, так тоже можно. И напишу следующие строчки кода:
public int language;
Эту переменную мы пишем перед стартом в начале класса
language = PlayerPrefs.GetInt("language", language);
А в старте указываем эту строчку, которая будет загружать язык. И ниже я приведу в пример скриншот, как примерно у вас должно быть:
И после нужно создать два метода, для кнопок. Как мы видим в каждом методе для определённого языка есть три строчки. На первой строчке мы меняем значение language. На следующей строчке это значение сохранится. А строчкой ниже произойдёт перезагрузка сцены, и кстати в скобочках незабудьте написать правильное название вашей сцены..
public void RussianLanguage(){
language = 0;
PlayerPrefs.SetInt("language", language);
SceneManager.LoadScene("Game");
}
public void EnglishLanguage(){
language = 1;
PlayerPrefs.SetInt("language", language);
SceneManager.LoadScene("Game");
}
Далее нужно не забыть указать кнопкам эти методы. Метод который переключает язык на русский, нужно назначить для соответствующей кнопке в инспекторе. Собственно таким образом и для другой кнопки.
Другой тип текста
Также бывают такие виды текста, которые выводят какие-то значения на экран, и к ним этот способ локализации будет не действителен. Поэтому придётся писать варианты перевода из скрипта, следующим образом:
if (language == 0){
textMoney.text = "Монет: " + money.ToString("f0");
textHealth.text = "Жизней: " + health.ToString("f0");
textSpeed.text = "Скорость: " + speed.ToString("f2");
} else if (language == 1){
textMoney.text = "Money: " + money.ToString("f0");
textHealth.text = "Health: " + health.ToString("f0");
textSpeed.text = "Speed: " + speed.ToString("f2");
}
Если код языка выбран 0, то тогда он будет отображаться следующим образом. А если 1, то тогда текст будет уже на английском.
Объяснение
И если коротко про этот принцип локализации. То при запуске загружается номер выбранного языка, и весь текст отображается под этим номером, и поэтому мы указывали несколько вариантов текста на разных языках.
Думаю вы поняли, а если нет, то обязательно посмотрите мой ролик. С ним станет понятней)
Такой подход подходит только для примитивных проектов. Кроме того, лезть каждый раз в код, чтобы что-то поправить или тем более добавить новую локализацию это боль. На данный момент в Unity уже появился полноценный пакет для реализации локализации https://docs.unity3d.com/Packages/com.unity.localization@1.3/manual/index.html