一般储存怪的数据的时候,都会想到数据库,操作数据库需要导入dll文件,手机平台能够支持,但是网页平台不支持(如果数据库放在服务端,就没有这个问题了), 所以想到用XML格式来存储数据,数据量也不大,操作也简单,可以直接将对象存为xml文件,而且玩家本地存档也会用到。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;//添加两个包
using System.Xml.Serialization;
using System.IO;
public class ttt
{
[XmlAttribute]
public string id;public ttt() { }
public ttt(string s) { id = s; }
}[SerializeField]//必须设置这个,要不然不能进行序列化
public class baseData
{
public string id;
[XmlAttribute]//设置为属性,而不是node
public int level;
public float exp;
[XmlIgnore]//XmlIgnore 序列化中忽略掉
public string testIgnore = "ssdf";
//get set设置的方式也可以进行序列化, 但是私有的不行
private int _seddd = 10;
public int seddd
{
get { return _seddd; }
set { _seddd = value; }
}
//可以设置数组结点和子结点的名字,如果不设置则为变量名和类型名字
[XmlArray("items"),XmlArrayItem("item")]
public ttt[] sss;//支持list
public List<ttt> aaa;}
public class testXMLSave : MonoBehavIoUr
{
//编辑器中跟目录是项目的目录, 如果要在运行中进行存档或修改的操作,要使用别的路劲
const string xmlPath = "Assets/booktest.xml";void Start ()
{
//创建一个basedata对象
baseData data = new baseData();data.id = "123455";
data.level = 20;
data.exp = 15.5f;data.sss = new ttt[3];
data.sss[0] = new ttt();
data.sss[0].id = "aaa2";
data.sss[1] = new ttt();
data.sss[1].id = "aaa1";data.aaa = new List<ttt>();
data.aaa.Add(new ttt("10"));
data.aaa.Add(new ttt("20"));//序列化为XML文件
XMLSerialize(data);
}
void XMLSerialize(baseData data)
{//写入的路径
TextWriter writer = new StreamWriter(xmlPath);
XmlSerializer obj = new XmlSerializer(typeof(baseData));
obj.Serialize(writer,data);
writer.Close();Debug.Log("dfdfsdf");
}//将XML格式的文件反序列化为对象
void XMLDeserialize()
{
//读取xml
TextReader writer = new StreamReader(xmlPath);
XmlSerializer obj = new XmlSerializer(typeof(baseData));
baseData data = obj.Deserialize(writer) as baseData;
writer.Close();
Debug.Log("load done:" + data.id);
}void OnGUI()
{
//点击进行反序列化
if (GUILayout.Button("Deserialize"))
{
XMLDeserialize();
}
}
}
将上面的代码绑定到场景里的任意对象上,执行后就会生成一个booktest.xml文件,并且点击Deserialize按钮后打印出了data.id的信息。说明已经成功将XML文件反序列化为对象了(不放心的话可以打断点查看对象数据)。
<?xml version="1.0" encoding="utf-8"?>
<baseData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" level="20"> <id>123455</id> <exp>15.5</exp> <items> <item id="aaa2" /> <item id="aaa1" /> </items> <aaa> <ttt id="10" /> <ttt id="20" /> </aaa> <seddd>10</seddd></baseData>