Способы локализации своей игры на Unity3D (C#)
Привет начинающим и не очень разработчикам игр на 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 был рад вам помочь!