【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]");

复杂数据结构与Json的相互转化

删除数据

//删除指定键值对
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();
}
posted @ 2024-10-10 09:07  Sitar  阅读(11)  评论(0编辑  收藏  举报