Unity自动保存并加载一个简单的变量

本文关键字:一个 简单 变量 保存 加载 Unity | 更新日期: 2023-09-27 18:01:12

我想以某种方式创建一个统计场景,显示一些关于用户与游戏交互程度的信息

Unity自动保存并加载一个简单的变量

OnApplicationFocusOnApplicationPause函数中这样做会更好,但在许多情况下,这些函数没有被调用,这也取决于平台。应该在OnEnableOnDisable函数内部执行,因为这些函数保证被调用。

不过,您需要将DontDestroyOnLoad(transform.gameObject);放在Awake函数中,以确保在游戏过程中加载新场景时不会调用OnEnableOnDisable

代码问题:

1。您使用PlayerPrefs.SetInt("test", timesPlayed);test密钥保存为int,然后使用PlayerPrefs.GetFloat("test")test密钥加载为float。

2。即使在加载时,也不会将加载的值分配给任何内容。timesPlayed = PlayerPrefs.GetInt("timesPlayed");应该这么做。

3。最后,您没有将其保存在exist上。不仅如此,您甚至不会从任何位置调用Save()Load()函数。您需要知道当Unity加载和卸载时会调用什么函数。

下面是一个基于脚本的打开计数器的简单次数。创建一个GameObject和下面的脚本。你现在可以扩展它以包括其他功能。

public class OpenCounter : MonoBehaviour
{
    int timesPlayed;
    public Text timeSpendOnGame;
    void Awake()
    {
        DontDestroyOnLoad(transform.gameObject);
        timeSpendOnGame.GetComponent<Text>();
    }
    void Start()
    {
        timeSpendOnGame.text = "" + timesPlayed;
    }

    public void Save()
    {
        PlayerPrefs.SetInt("timesPlayed", timesPlayed);
    }
    //Load
    public void Load()
    {
        timesPlayed = PlayerPrefs.GetInt("timesPlayed");
    }
    //Load when Opening
    public void OnEnable()
    {
        Debug.Log("Opening!");
        Load();
    }
    //Increment and Save on Exit
    public void OnDisable()
    {
        Debug.Log("Existing!");
        timesPlayed++; //Increment how many times opened
        Save(); //save
    }
}