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 類型的數據                 GetFloat        獲取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();
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM