Unity3d數據存儲 PlayerPrefs,XML,Json數據的存儲與解析
今天來復習一下數據存儲方面的基礎知識,Unity3d中常用的數據存儲方式有Unity自帶的PlayerPrefs, XML文檔, Json文檔,還有常用的輕量級數據庫SQL, 涉及的瑣碎知識非常多,在這裏自己歸納總結一下,方便日後溫故而知新.
PlayerPrefs存儲數據
PlayerPrefs的存儲方式非常簡單,但可用性不強,一般只用於調試過程存儲少量數據,很少大範圍使用
適用設備:Mac OSX, Linux, Windows,Web Players
存儲機制:Key-Value (類似於字典的鍵值對,通過鍵值索引到相應數據)
可存儲變量類型: int, float, string
常用方法: SetFloat 存儲float 類型的數據 G
SetInt 存儲Int類型的數據 GetInt 獲取Int 類型的數據
SetString 存儲string 類型的數據 GetString 獲取string 類型的數據
DeleteAll 刪除所有PlayerPrefs數據 HasKey 判斷是否存在該Key值的數據
簡單代碼示例如下,是不是很簡單?
void ExamplePlayerPrefs() { PlayerPrefs.SetFloat("PlayerScore", 10f); Debug.Log(PlayerPrefs.GetFloat("PlayerScore")); }
XML的存儲與解析
(1)XMl常用類及其常用屬性和方法
XmlNode
InnerText 獲取或設置節點及其所有子節點的值(僅元素節點擁有)
Value 獲取或設置節點的值(僅屬性節點擁有)
AppendChild 將指定的節點添加到該節點的子節點列表的末尾
ChildNodes 獲取節點的所有子節點
FirestChild
XmlDocument
CreateXmlDeclaration 創建一個具有指定值的XmlDeclaration節點
CreateElement 創建具有指定名稱的元素
CreateNode 創建具有指定的節點類型的XmlNode
AppendChild 將指定節點添加到末尾(繼承自XmlNode)
Save 將Xml文檔保存到指定的文件
Load 從指定的URL加載Xml文檔
LoadXml 從指定的字符串加載Xml文檔
XmlElement
SetAttribute 設置具有指定名稱的特性的值
HasAttributes 判斷該元素節點是否具有屬性
GetAttribute 返回具有指定名稱的屬性值
(2)XML數據的生成步驟
在Unity引擎中如何生成本地XML數據?
第一步:引入C#的命名空間 System.Xml
第二步:生成XML文檔(XmlDocument類)
第三步: 生成根元素(XmlElement類) 添加給文檔對象
第四步:循環生成子元素添加給父元素
第五步:將生成的XML文檔保存
(3)XML解析步驟
在解析時註意, 需要根據Xml文件的結構創建好對應的數據模型,去接受解析出來的數據!!!
Json的存儲與解析
Json一般使用兩個類庫,一個System.Json(便於Json生成),一個是LitJson(便於Json解析)
Json生成
void LitCtreatJson() { JsonData hero = new JsonData(); hero["HeroName"] = "諾克薩斯"; hero["Hp"] = 100; hero["attack"] = 40; hero["Skills"] = new JsonData(); JsonData skill1 = new JsonData(); skill1["KeyCode"] = "Q"; skill1["Name"] = "大殺四方"; skill1["Mp"] = 20; skill1["cd"] = 8; hero["Skills"].Add(skill1); JsonData skill2 = new JsonData(); skill2["KeyCode"] = "W"; skill2["Name"] = "致殘打擊"; skill2["Mp"] = 40; skill2["cd"] = 5; hero["Skills"].Add(skill2); JsonData skill3 = new JsonData(); skill3["KeyCode"] = "E"; skill3["Name"] = "無情鐵手"; skill3["Mp"] = 10; skill3["cd"] = 9; hero["Skills"].Add(skill3); JsonData skill4 = new JsonData(); skill4["KeyCode"] = "R"; skill4["Name"] = "諾克薩斯斷頭臺"; skill4["Mp"] = 120; skill4["cd"] = 60; hero["Skills"].Add(skill4); }
Json解析
void LitParseJson() { FileInfo file =new FileInfo(Application.dataPath + "/LoL.json"); StreamReader sr = new StreamReader(file.OpenRead(), Encoding.UTF8); string content = sr.ReadToEnd(); JsonData data= JsonMapper.ToObject(content); foreach (JsonData item in data["Skills"]) { print(item["name"]); } Hero hero; hero = JsonUtility.FromJson<Hero>(content); sr.Close(); sr.Dispose(); }
Unity3d數據存儲 PlayerPrefs,XML,Json數據的存儲與解析