Способы локализации своей игры на Unity3D (C#)

Александр TheFrankyDoll

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

Вот как решил проблему я:

Итак, наша абстрактная игра будет переведена на несколько языков: для примера на Русский и Английский.
Для этого я создаю небольшой класс "Localization" В котором задаю перечисление языков и статическую переменную, содержащую один из элементов выше указанного перечисления. Статическая эта переменная потому что переведена будет вся игра, и создавать экземпляра нашего класса будет не нужно.Класс так же статический.
Вот мой код класса "Localization":

//C#

public static class Localization {

    public enum Languages
    {
        English,
        Russian,
    }

    public static Languages GameLanguage = Languages.English; *// По умолчанию ставим Английский.*
}

Сам скрипт в игре никуда ставить не нужно, просто оставляем его в ассетах.

Теперь мы имеем простую систему, по которой уже можно переводить все другие объекты в игре.
Простой пример: отрывок скрипта HealthBar-а:

//C#

if (Health > 0)
        {
            gameObject.GetComponent<Text>().text = String.Format("{0} / {1}", Health, MaxHealth);
        }
        else if (Health <= 0)
        {
            switch (Localization.GameLanguage) //Обращаемся к переменной в классе "Localization"
            {
                case Localization.Languages.English:
                    gameObject.GetComponent<Text>().text = "Dead";
                    break;
                case Localization.Languages.Russian:
                    gameObject.GetComponent<Text>().text = "Мёртв";
                    break;
                                        *//Если у нашей игры будут ещё языки, то можно продолжать этот список.*
            }
        }

Таким образом можно переводить вообще всё: даже текстуры другие ставить (что полезно, согласитесь.)

Полагаю, проблем с изменением такой переменной не возникнет, перед игрой делаем 2 кнопки с названием языка, какую игрок выберет на такой игра и будет переведена. Меня правда напрягает, что выбор языка происходит прямо в момент действия с текстом, но я не замечал что то плохое в работе такой системы.
А как думаете вы? Возможно, есть варианты проще или практичней? Если это так, то вы всегда можете написать об этом ниже. Ну а если всё хорошо, то FrankyDoll был рад вам помочь!

2 чел.