【Unity】資料持久化PlayerPrefs

Sitar發表於2024-10-10

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();
}

相關文章