今天来复习一下数据存储方面的基础知识,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文档保存

unity如何从mysql数据库中读取信息 unity 数据存储_数据

unity如何从mysql数据库中读取信息 unity 数据存储_数据_02

(3)XML解析步骤

unity如何从mysql数据库中读取信息 unity 数据存储_XML_03

在解析时注意, 需要根据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();
    }