Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Все Гайды Мой Кабинет

Как сделать локализацию в своей игре

Всем привет, в этой статье я покажу вам как сделать локализацию вашей игры. Ведь наверно каждый хочет чтобы его игра была переведена на разные языки, чтобы каждый желающий из разных стран мог поиграть в ваш шедевр.

Я буду показывать на примере своего проекта. В нём есть уже готовый текст, и две кнопки, с помощью которых мы будем переключать язык с русского на английский. Но вы таким методом можете создавать куда больше языков для вашей игры.

Скрипт для текста

И для начала нам понадобится следующий скрипт, приведённый чуть ниже. Этот скрипт мы будем добавлять на любой 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, то тогда текст будет уже на английском.

Объяснение

И если коротко про этот принцип локализации. То при запуске загружается номер выбранного языка, и весь текст отображается под этим номером, и поэтому мы указывали несколько вариантов текста на разных языках.

Думаю вы поняли, а если нет, то обязательно посмотрите мой ролик. С ним станет понятней)

Вы можете отблагодарить автора донатом. ₽ Спасибо

Комментарии

2
Nerfius 2 года назад

Такой подход подходит только для примитивных проектов. Кроме того, лезть каждый раз в код, чтобы что-то поправить или тем более добавить новую локализацию это боль. На данный момент в Unity уже появился полноценный пакет для реализации локализации https://docs.unity3d.com/Packages/com.unity.localization@1.3/manual/index.html

Eldor 1 год назад

Nerfius, хотел использовать метод из топика, т.к. он очень простой в реализации, но решил ознакомиться с официальным подходом - благодарю за ссылку.
Автору темы +.

Гости не могут оставлять комментарии. Войдите на Сайт или Зарегистрируйтесь