今天来复习一下数据存储方面的基础知识,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(); }