硬盘(数据永远存储在电脑上) | 软盘、 数据的删除都是由用户/程序决定的 |
内存(关闭软件就全丢了) | 程序运行时分配内存、 程序结束时回收内存、 |
CPU缓存 |
PlayerPrefs(Unity内置持久化储存类)
储存类型
Float |
Int |
String |
使用范围
PC( OS X,Windows,Linux ) |
iOS |
Android |
... |
储存路径
⭐Mac OS X: | ~/Library/Preferences |
⭐Windows: | HKCU\Software\[company name]/[product name] |
⭐Linux: | ~/.config/unity3d/ [CompanyName]/ [ProductName] |
常用方法
静态方法 |
描述 |
SetFloat | 储存float类型的数据 |
SetInt | 储存int类型的数据 |
SetString | 储存String类型的数据 |
DeleteAll | 删除所有PlayerPrefs数据 |
静态方法 |
描述 |
GetFloat | 通过Key值获取float类型的数据 |
GetInt | 通过Key值获取int类型的数据 |
GetString | 通过Key值获取String类型的数据 |
HasKey | 判断是否存在该Key值的数据 |
注意:
PlayerPrefs类型,即便是不同的数据类型也不能同名。
【如果元素中没有文本】
正常写法:<GameObject></GameObject>
渐变写法:<GameObject />
XML(将信息储存在电脑本地上)
XML简介
XML是一个文档 → 后缀名是*.xml
XML是一个特殊格式的文档
XML结构
XML节点
XML操作类
继承结构
-System.Object
-System.Xml.XmlNode(表示XML节点)
+System.Xml.XmlDocument (表示XML⽂档)
+System.Xml.XmlAttribute (表示XML属性)
-System.Xml.XmlLinkedNode
+System.Xml.XmlElement(表示XML元素)
XMLNode(节点类)
属性和方法(All) |
说明(All) |
InnerText | 获取或设置节点及其所有子节点的值。(仅元素节点拥有) |
Value | 获取或设置节点的值。(仅属性节点拥有) |
AppendChild | 将指定的节点添加到该节点的子节点列表的末尾 |
方法(解析) |
说明(解析) |
ChildNodes | 获取节点的所有子节点 |
FirstChild | 获取节点的第一个子节点 |
HasChildNodes | 判断该节点是否有任何子节点 |
InnerText | 获取或设置节点及其所有子节点的值 |
SelectSingleNode | 选择匹配 XPath 表达式的第一个 XmlNode。 |
SelectNodes | 选择匹配 XPath 表达式的所有 XmlNode。 |
XMLDocument(XML⽂档类)
方法(储存) |
说明(储存) |
CreateXmlDeclaration | 创建一个具有指定值的XmlDeclaration节点 |
CreateElement | 创建具有指定名称的元素 |
CreateNode | 创建具有指定节点类型、Name和NamespaceURI的XmlNode |
AppendChild | 将指定的节点添加到该节点的子节点列表的末尾(继承自XmlNode。) |
Save | 将XML文档保存到指定的文件 |
方法(解析) |
说明(解析) |
DocumentElement | 获取 XML 文档的根。如果根不存在,则返回null |
Load | 从指定的 URL 加载 XML 文档。 |
LoadXml | 从指定的字符串加载 XML 文档。 |
XMLElement(XML元素类)
方法(储存) |
说明(储存) |
SetAttribute | 设置具有指定某名称的特性的值 |
HasAttributes | 判断该元素节点是否具有属性 |
方法(解析) |
说明(解析) |
GetAttribute | 返回具有指定名称的属性值 |
生成步骤
⭐第一步:引用C#的命名空间System.Xml |
⭐第二部:生成XML文档(XmlDocument 类) |
⭐第三步:生成根元素 (XmlElement 类)添加给文档对象 |
⭐第四步:循环生成子元素添加给父元素 |
⭐第五步:将生成的XML文档保存 |
XML生成示例
// 实例化XML文档对象
XmlDocument doc = new XmlDocument();
//XmlNode headNode = doc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
// 头文本节点
XmlDeclaration headNode = doc.CreateXmlDeclaration("1.0", "UTF-8", "");
// 将头文本节点,添加到文档
doc.AppendChild(headNode);
// 创建元素
XmlElement gameObject_EL = doc.CreateElement("GameObject");
// 给元素添加属性
gameObject_EL.SetAttribute("name", gameObject.name);
// 直接创建一个属性节点
XmlAttribute layer_AT = doc.CreateAttribute("layer");
// 设置属性的值
layer_AT.Value = gameObject.layer.ToString();
// 给元素添加属性节点
gameObject_EL.SetAttributeNode(layer_AT);
// 给元素节点添加文本节点
//gameObject_EL.InnerText = gameObject.name;
// 创建刚体元素
XmlElement rigidbody_EL = doc.CreateElement("Rigidbody");
// 创建刚体质量元素
XmlElement rigidbody_Mass_EL = doc.CreateElement("Mass");
// 刚体质量元素赋值文本
rigidbody_Mass_EL.InnerText = rig.mass.ToString();
// 创建是否使用重力的元素
XmlElement rigidbody_UseGrivity_EL = doc.CreateElement("UseGrivity");
// 给元素设置文本
rigidbody_UseGrivity_EL.InnerText = rig.useGravity.ToString();
// 将元素添加到父元素
rigidbody_EL.AppendChild(rigidbody_UseGrivity_EL);
// 添加刚体质量元素到刚体元素节点
rigidbody_EL.AppendChild(rigidbody_Mass_EL);
// 添加刚体节点到游戏对象节点
gameObject_EL.AppendChild(rigidbody_EL);
// 添加元素到xml文档
doc.AppendChild(gameObject_EL);
// 保存
doc.Save(Application.dataPath + "/obj.xml");
XML解析示例
//创建xml⽂件对象
XmlDocument doc = new XmlDocument();
//加载xml⽂件
doc.Load(Application.dataPath + “/book.xml”);
//获取根节点
XmlElement root = doc.DocumentElement;
//筛选节点
XmlNodeList listNodes = root.SelectNodes(“/bookstore/book/price”);
//获取List中每⼀个节点
foreach (XmlNode node in listNodes )
{
//打印节点内容
Debug.Log(node.InnerText);
}
JSON(将信息储存在电脑本地上或云端)
简介:⭐JSON 是纯文本
⭐JSON 是一种轻量级的数据交换格式
⭐JSON 具有层级结构(值中存在值)
语法:⭐数据都放置到一个大括号里
⭐一对对的数据放到大括号里
⭐一个个的数据放到中括号里
⭐一个大括号或一个中括号都可以表示一个值
⭐数据与数据之间用逗号分隔
⭐Key必须要用引号引起来
⭐Value如果是字符串要用引号引起来
⭐最后一个数据后面不要加逗号
JSON开发
使用类库有两种:⭐System.Json(便于JSON生成)
需要将System.Json.dll放入到Assets文件夹下的Plugins文件夹
⭐LitJson(便于JSON解析)
需要将LitJson.dll放入到Assets文件夹下的Plugins文件夹
⭐(提前编译的文件夹)
Plugins → DLL
Editor → 插件脚本
Standard Assets → 标准资源包
System.Json
类 |
说明 |
API |
JsonArray | JsonArray是零个或更多的 JsonValue对象的有序序列 |
Add(JsonValue) 添加一个数组元素 AddRange() 添加多个数组元素 |
JsonObject | JsonObject是一个无序的零个或更多的键/值对的合集 | Add(string,JsonValue) 添加一个键值对 AddRange() 添加多个键值对 Remove() 移除某个键值对 Clear() 清除 |
JsonValue | JsonValue可以是一个数字、字符串等等,也可以是JsonObject,也可以是JsonArray |
表示各种值(bool、int、float、string、 jsonObject、jsonValue) |
LitJson
方法 |
说明 |
JsonMapper.ToJson |
⭐把对象转换成JSON格式字符串 |
JsonMapper.ToObject | ⭐把JSON格式字符串转换成Json数据 |
JsonMapper.ToObject<T> | ⭐把JSON格式字符串转换成指定类的对象 |
可以声明一个类并且类中的值如果跟数据中的Key完全一致,可以直接一键赋值过去,泛型填入该类的名称 |
private Root ParseJson()
{
return JsonMapper.ToObject<Root>(json);
}
UnityEngine.JsonUtility
方法 |
说明 |
FromJson | 创建一个对象 JsonMapper.ToObject |
FromJson<T> | 创建一个对象 JsonMapper.ToObject<T> 自定义的类需要序列化[System.Serializable] |
FromJsonOverwrite | 获取Json中的信息,覆盖某个对象的数据 |
ToJson | 将一个对象储存为String类型 |
XML和Json对比
XML | JSON | |
语法格式 | 用节点表示的树形结构 | 数组与键值对(字典/对象) |
数据量 | 文件庞大 | 轻量级 |
可读性 | 较强 | 较弱 |
解析难度 | 相对麻烦 | 相对容易 |
执行效率 | 较低 | 较高 |