1. 程式人生 > >Unity3d數據存儲 PlayerPrefs,XML,Json數據的存儲與解析

Unity3d數據存儲 PlayerPrefs,XML,Json數據的存儲與解析

文件 windows play toe creat 擁有 add key值 判斷

今天來復習一下數據存儲方面的基礎知識,Unity3d中常用的數據存儲方式有Unity自帶的PlayerPrefs, XML文檔, Json文檔,還有常用的輕量級數據庫SQL, 涉及的瑣碎知識非常多,在這裏自己歸納總結一下,方便日後溫故而知新.

PlayerPrefs存儲數據

PlayerPrefs的存儲方式非常簡單,但可用性不強,一般只用於調試過程存儲少量數據,很少大範圍使用

適用設備:Mac OSX, Linux, Windows,Web Players

存儲機制:Key-Value (類似於字典的鍵值對,通過鍵值索引到相應數據)

可存儲變量類型: int, float, string

常用方法: SetFloat 存儲float 類型的數據 G

etFloat 獲取float 類型的數據

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數據的存儲與解析