【Unity】数据持久化PlayerPrefs
PlayerPrefs
存储数据,数据为[key-value]形式
可以用保存用户的设置、偏好;历史得分数据等;
保存的数据位置
不同的系统数据将被保存在不同的位置。
Windows系统保存的数据将会被存储在系统注册表中,位置如下:
(编辑器运行模式)\HKEY_CURRENT_USER\SOFTWARE\Unity\UnityEditor\DefaultCompany\[公司名]
(包模式)\HKEY_CURRENT_USER\SOFTWARE\[公司名]
公司名在unity编辑器中的playerSetting中查看和设置
保存数据
PlayerPrefs保存的数据约束:
只能保存3种数据类型
key为string
value为int float string
PlayerPrefs.SetString("[key]", "[value]");
PlayerPrefs.Save();
//其他
//int型
PlayerPrefs.SetInt("[key]", 18);
//float型
PlayerPrefs.SetFloat("[key]", 181.5f);
获取数据
string jsonString = PlayerPrefs.GetString("[key]");
//JsonUtility.FromJson<>只能转换简单数据结构。
//如果需要解构复杂数据结构,可以使用 Newtonsoft.json 插件
T obj = JsonUtility.FromJson<T>(jsonString);
//判断某key是否存在
PlayerPrefs.HasKey("[key]");//返回bool
//其他
//int型
int value = PlayerPrefs.GetInt("[key]");
//key不存在时,第二个参数放默认值
age = PlayerPrefs.GetInt("[key]", 23);
//float型
float value = PlayerPrefs.GetFloat("[key]");
删除数据
//删除指定键值对
PlayerPrefs.DeleteKey("[key]");
//删除所有数据
PlayerPrefs.DeleteAll();
应用:排行榜数据持久化
[System.Serializable]
private class HighscoreEntry
{
public int score;
public string name;
}
private class Highscores
{
public List<HighscoreEntry> highscoreEntryList;
}
private void AddHighscoreEntry(int score, string name)
{
HighscoreEntry highscoreEntry = new HighscoreEntry { score = score, name = name };
//获取排行榜,并将新的数据存入排行榜列表
string jsonString = PlayerPrefs.GetString("highscoreEntryList");
Highscores highscores = JsonUtility.FromJson<Highscores>(jsonString);
highscores.highscoreEntryList.Add(highscoreEntry);
//重新保存排行榜列表
string json = JsonUtility.ToJson(highscores);
PlayerPrefs.SetString("highscoreEntryList", json);
PlayerPrefs.Save();
}