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