Не работает PlayerPrefs (скорее всего не получает данные)

Все организовал через HasKey, если ячейки нету то она создаеться и заполняеться. У меня много ключей и всё работало но когда я сделал локализацию игры (добавил еще один ключ "Language") на пк все работало отлично но когда сделал билд приложения на андроид то данные просто не подгружались (количество монет, выбранный персонаж и т.д), возможно и не сохранялись.

Локализация у меня реализована так

if (PlayerPrefs.HasKey("Language"))
{
    language = PlayerPrefs.GetString("Language");
}
else
{
    language = "En";
    PlayerPrefs.SetString("Language", language);
}

if (language == "En")
{
    text.text = enText;
}
else
{
    text.text = ruText;
}

Ну и скрипт который меняет значение "Language" по нажатию на кнопку. Хотелось бы узнать почему вообще может не работать PlayerPrefs?

p.s. когда проверял на пк удалял все данные в реестре.


Ответы (1 шт):

Автор решения: Andrew

Не ответ.

Но есть мелкий шанс что поможет. Рефакторинг и приведение "в человеческий вид" кода иногда решает вопрос буквально магическим образом.

Необходимо разделить ответственность в коде.

Предлагаю сделать скрипт который задает дефолтные значения на все префы, которые не имеют своего стандартного значения.

Это должен быть скрипт на самой первой сцене на методе Awake()

public void Awake() 
{
    SetDefaultKeyIfNeeded("Language","En");
}

public void SetDefaultKeyIfNeeded(String key, String value) {
     if (!PlayerPrefs.HasKey(key)) 
     {
          PlayerPrefs.SetString(key, value);
     }
}

А все использования префов должны быть:

  • или не раньше Start()-а на первой сцене(вероятнее всего это главное меню у тебя).
  • или в абсолютно любом месте на иных сценах игры

Это позволит во всех местах пользоваться только PlayerPrefs.Get семейством методов.

т.е. в нужном месте писать просто

language = PlayerPrefs.GetString("Language");

Фактически так мы отделили установку стандартных значений настроек от использования самих настроек в иных местах программы.


Теперь про саму проблему - после того как сделаешь так как я написал выше - если это не решит проблему(что маловероятно, но теоретически возможно) - необходимо дебажится. Ищи информацию о том как дебажить при запуске игры с телефона.

Просто так здесь на ресурсе вряд ли тебе кто-то угадает в чем именно проблема. Эта проблема решается именно через дебаг.

→ Ссылка