Unity(数据的储存&解析)

计算机储存数据的区域

硬盘(数据永远存储在电脑上)

软盘、

数据的删除都是由用户/程序决定的

内存(关闭软件就全丢了)

程序运行时分配内存、

程序结束时回收内存、

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
语法格式 用节点表示的树形结构 数组与键值对(字典/对象)
数据量 文件庞大 轻量级
可读性 较强 较弱
解析难度 相对麻烦 相对容易
执行效率 较低         较高        

猜你喜欢

转载自blog.csdn.net/qq_24977805/article/details/122192138