Не работает 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 шт):
Не ответ.
Но есть мелкий шанс что поможет. Рефакторинг и приведение "в человеческий вид" кода иногда решает вопрос буквально магическим образом.
Необходимо разделить ответственность в коде.
Предлагаю сделать скрипт который задает дефолтные значения на все префы, которые не имеют своего стандартного значения.
Это должен быть скрипт на самой первой сцене на методе 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");
Фактически так мы отделили установку стандартных значений настроек от использования самих настроек в иных местах программы.
Теперь про саму проблему - после того как сделаешь так как я написал выше - если это не решит проблему(что маловероятно, но теоретически возможно) - необходимо дебажится. Ищи информацию о том как дебажить при запуске игры с телефона.
Просто так здесь на ресурсе вряд ли тебе кто-то угадает в чем именно проблема. Эта проблема решается именно через дебаг.