Unity自动保存并加载一个简单的变量
本文关键字:一个 简单 变量 保存 加载 Unity | 更新日期: 2023-09-27 18:01:12
我想以某种方式创建一个统计场景,显示一些关于用户与游戏交互程度的信息
在OnApplicationFocus
和OnApplicationPause
函数中这样做会更好,但在许多情况下,这些函数没有被调用,这也取决于平台。应该在OnEnable
和OnDisable
函数内部执行,因为这些函数保证被调用。
不过,您需要将DontDestroyOnLoad(transform.gameObject);
放在Awake函数中,以确保在游戏过程中加载新场景时不会调用OnEnable
和OnDisable
。
代码问题:
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
}
}