Не работает 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 шт):

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

В методе GetInt() второй параметр лишний. Пиши просто:

PlayerPrefs.GetInt("Days")
→ Ссылка
Автор решения: Alemkhan Utepkaliev

Проблема в следующем, в 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, это будет продолжаться очень долго
→ Ссылка