Не работает playerprefs
Сохраняю при помощи playerprefs переменную, выгружаю сцену, но на следующей сцене загрузить не могу. Скрипт сохраняет переменную Days, а после загрузки другой сцены подгружает и использует.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Timers;
public class Brain : MonoBehaviour
{
// Start is called before the first frame update
public int x = 0;
public GameObject phone;
public GameObject txt1;
public GameObject txt2;
public GameObject mes1;
bool V = false;
public int Days = 0;
float time = 0f;
void Start()
{
}
// Update is called once per frame
void Update()
{
if (time > 0f)
{
time -= Time.deltaTime;
}
if (time <= 0)
{
txt1.SetActive(false);
time = 5f;
}
PlayerPrefs.SetInt("Days", Days);
PlayerPrefs.Save();
if (PlayerPrefs.GetInt("Days", Days) == 2) { mes1.SetActive(true); }
Days=PlayerPrefs.GetInt("Days", Days);
}
public void Sleep()
{
Days += 1;
PlayerPrefs.SetInt("Days", Days);
PlayerPrefs.Save();
if (x > 0)
{ x = x - 1; }
if (x > 0)
{ V = false; }
else
{ V = true; }
if ((Days == 1) & (V = false))
{
txt1.SetActive(true);
time = 2f;
}
else { txt2.SetActive(true); }
if (Days==3) { txt2.SetActive(true); phone.SetActive(true); }
}
public void Buy1() { x = 1; }
public void Buy2() { x = 2; }
public void Buy3() { x = 4; }
}
Ответы (2 шт):
В методе GetInt() второй параметр лишний. Пиши просто:
PlayerPrefs.GetInt("Days")
Проблема в следующем, в Update() вызываете SetInt() и каждый кадр сохраняете значение поля Days которое при старте равно 0 как я понимаю, и после этого назначаете Days значение которое сохранили то есть 0 и это происходит каждый кадр, пересмотрите свой код и пройдетесь по нему так как он проходит каждый кадр, и поймите нужен ли Вам такой результат, я думаю нет, также поле Days является public который не регулируется, и возможно где то он меняется, и вы получаете не тот результат, уберите SetInt() с Update() и чётко контролируйте все свои public поля на изменения вне данного класса
PlayerPrefs.SetInt("Days", Days); // Назначается значение в Days Prefs каждый кадр, при старте он равен 0
PlayerPrefs.Save(); // Сохраняется каждый кадр
if (PlayerPrefs.GetInt("Days", Days) == 2)
{
mes1.SetActive(true);
}
Days=PlayerPrefs.GetInt("Days", Days); // Теперь в Days присвается Days Prefs который был сохранен ранее то есть 0, это будет продолжаться очень долго