Сохранение и загрузка значения переменной

Добрый вечер. В результате выполнения заданий у меня выводится результат переменной к, соответственно при переходе на какую-либо другую сцену все данные сбиваются. Подскажите пожалуйста как можно сохранять значения хотя бы для этой переменной, чтобы при повторном использовании этой сцены значение оставалось прежним. И можно ли будет использовать этот скрипт (test1) с этой же переменной потом еще в другом скрипте (result). Набросал часть, но не уверен, что это работает именно так. Буду благодарен за любые возможные подсказки.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class test1 : MonoBehaviour
{
    public Text text1;
    public Text text2;
    public Text text3;
    public Text text4;
    public Text text5;

    public Text t1;
    public Text t2;
    public Text t3;
    public Text t4;
    public Text t5;
    public string s;
    public Text textk;
    bool click;
    public int k ;
    public static int k0,k1,k2,k3,k4;
    // Start is called before the first frame update
 
    
    public void Button1_1()
    {
        text1.text = ("Неверно");
        k0 = 0;
        
    }
    public void Button1_2()
    {
        text1.text = ("Неверно");
        k0 = 0;
       
    }

        public void Button1_3()
        {
            text1.text = ("Верно");
            k0 = 20;
    }
    public void Button2_1()
    {
        text2.text = ("Неверно");
        k1 = 0;
    }
    public void Button2_2()
    {
        text2.text = ("Верно");
        k1 = 20;
    }

    public void Button2_3()
    {
        text2.text = ("Неверно");
        k1 = 0;
    }
    public void Button3_1()
    {
        text3.text = ("Верно");
        k2 = 20;
    }
    public void Button3_2()
    {
        text3.text = ("Неверно");
        k2 = 0;
    }

    public void Button3_3()
    {
        text3.text = ("Неверно");
        k2 = 0;
    }
    public void Button4_1()
    {
        text4.text = ("Неверно");
        k3 = 0;
    }
    public void Button4_2()
    {
        text4.text = ("Неверно");
        k3 = 0;
    }

    public void Button4_3()
    {
        text4.text = ("Верно");
        k3 = 20;
    }
    public void Button5_1()
    {
        text5.text = ("Верно");
        k4 = 20;
    }
    public void Button5_2()
    {
        text5.text = ("Неверно");
        k4 = 0;
    }

    public void Button5_3()
    {
        text5.text = ("Неверно");
        k4 = 0;
    }
   public void Result()
    {
        
        k = k0 + k1 + k2 + k3 +k4 ;

         s = k.ToString();
        PlayerPrefs.SetString("result", JsonUtility.ToJson(s));
        textk.text = s;
        string s1 = JsonUtility.FromJson<string>(PlayerPrefs.GetString("result"));
    }
    private void Start()
    {
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class result : MonoBehaviour
{
    public Text textkl;
    public int kol;
    // Start is called before the first frame update
    void Start()
    {
       kol = textkl.GetComponent<test1>().k;
        string m = kol.ToString();
        textkl.text = m; 
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

Например через Unity - Scripting API: PlayerPrefs

Можно без строк и JSON.

Unity - Scripting API: PlayerPrefs.SetInt
Unity - Scripting API: PlayerPrefs.GetInt

Ну и читать оттуда наверно надо в Start и т.п.

Да вот тоже думал сохранение и чтение в Start закинуть, но потом для загрузки пытался воспользоваться такой конструкцией : string s2 = s1.s или нечто в этом роде. Сомневаюсь, что это правильно, т.к s в этом случае просто на просто не считывается как переменная. Словом, не совсем пойму, как еще можно сделать загрузку.

k = PlayerPrefs.GetInt("result");
1 лайк

Все даже настолько проще. Большое спасибо, попытаюсь так сделать

Извините, а не подскажите случайно как можно в скрипте Result использовать сохраненную переменную k из скрипта test1? По примерам из интернета вроде бы прописал код, но видимо как-то не так.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class result : MonoBehaviour
{
    public Text textkl;
    static int kol;
    // Start is called before the first frame update
    void Start()
    {
      
    }

    // Update is called once per frame
    void Update()
    {
         kol = textkl.GetComponent<test1>().k;
        string m = kol.ToString();
        textkl.text = m; 
    }
}

Если оно сохраняется в test1 после всех изменений, то можно и тут просто

1 лайк

Конструкция удобная, но дело в том, что значения все равно сбиваются, и чтобы получить их повторно нужно нажать на кнопку (процедура Result). Поэтому при переходе на другую сцену со скриптом result подгружается 0, вместо допустим 100.

После Set надо вызвать Save для сохранения на диск.

1 лайк

Сохранение вроде бы работает теперь.

public void Result()
    {
        k = k0 + k1 + k2 + k3 +k4 ;
         s = k.ToString();
        textk.text = s;
    }
    
     void Start()
    {
        PlayerPrefs.SetInt("result", k);
        PlayerPrefs.Save();
        k = PlayerPrefs.GetInt("result");
        Result();
    }

Но почему то на другой сцене все равно 0 выводится.

 void Update()
    {
        kol = PlayerPrefs.GetInt("result");
        // kol = textkl.GetComponent<test1>().k;
        string m = kol.ToString();
        textkl.text = m;

    }

Так а смысл в Start сохранять? Это наверно в Result должно быть.

1 лайк

И в самом деле, огромнейшее Вам спасибо за помощь.