持久化 设置 emp Coding tasks blog enc 取数
最近工作需要用到数据持久化,所以在此分享一下,通过查阅资料,数据持久化大体都是通过 xml 或者 json 来进行的。unity 为我们自定义了数据持久化方法,但是比较局限,还需要自己来完成数据持久化方法。
(一)unity 方法
unity 提供了三个方法来实现数据持久化,不过只能对 int float string 类型进行数据持久化,命令如下
- //设定Key=float的值为12fPlayerPrefs.SetFloat("float", 12f);
- //通过key值"float"获取数值12,如果"float"未设定值,则默认为1fPlayerPrefs.GetFloat("float", 1f);
- //相关定义与setfloat相同PlayerPrefs.SetInt("int",12);
- PlayerPrefs.GetInt("int",1);
- PlayerPrefs.SetString("str","abc");
- PlayerPrefs.GetString("str","default");
unity 提供的方法比较局限,复杂数据还需要自己进行数据可持续化
(二)C# 与 xml
通过 C# 编写读取修改 xml
1)编写 xml
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Xml;
- namespace XmlRW
- {
- class Program
- {
- static voidMain(string[] args)
- {
- XmlDocument xmldoc =new XmlDocument();
- //加入XML的声明段落,<?xml version="1.0" encoding="gb2312"?>
- XmlDeclaration xmldecl;
- xmldecl = xmldoc.CreateXmlDeclaration("1.0","gb2312",null);
- xmldoc.AppendChild(xmldecl);
- //加入一个根元素XmlElement xmlelem = xmldoc.CreateElement("","ToolAndFrame","");
- xmldoc.AppendChild(xmlelem);
- for(inti =1; i <3; i++)
- {
- string identifyStr;
- string id;
- int count;
- if(i==1)
- {
- identifyStr ="tool";
- count =16;
- }
- else
- {
- identifyStr ="frame";
- count =32;
- }
- //增加次级节点XmlNode root = xmldoc.SelectSingleNode("ToolAndFrame");//查找<ToolAndFrame> XmlElement elem = xmldoc.CreateElement(identifyStr);//创建一个<identifyStr>节点 elem.SetAttribute("ID", identifyStr);//设置该节点ID属性
- //xe1.SetAttribute("ISBN", "2-3631-4");//设置该节点ISBN属性
- for(intj=0;j)
- {
- XmlElement toolElem = xmldoc.CreateElement("elem"+i.ToString());
- toolElem.SetAttribute("ID", j.ToString());
- toolElem.InnerText ="未知 [?]";
- elem.AppendChild(toolElem);
- }
- root.AppendChild(elem);//添加到<Employees>节点中
- }
- xmldoc.Save("ToolAndFrame.xml");
- }
- }
- }
2)读取
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Xml;
- namespace ReadXml
- {
- class Program
- {
- static voidMain(string[] args)
- {
- XmlDocument xmlDoc =new XmlDocument();
- xmlDoc.Load("ToolAndFrame.xml");
- List<string> strList =newList<string>();
- XmlNodeList nodeList = xmlDoc.SelectSingleNode("ToolAndFrame").ChildNodes;//获取Employees节点的所有子节点
- foreach(XmlNode tempinnodeList)//遍历所有子节点
- {
- XmlElement elem = (XmlElement)temp;//将子节点类型转换为XmlElement类型
- //if (elem.GetAttribute("genre") == "张三")//如果genre属性值为"张三"
- //{
- // elem.SetAttribute("genre", "update张三");//则修改该属性为"update张三"
- //}XmlNodeList childElem = elem.ChildNodes;//继续获取xe子节点的所有子节点
- foreach(XmlNode nodeinchildElem)//遍历
- {
- XmlElement xml = (XmlElement)node;//转换类型
- //if (xml.Name == "author")//如果找到
- //{
- // xml.InnerText = "亚胜";//则修改
- //}
- strList.Add(xml.InnerText);
- }
- }
- foreach(stringstrin strList)
- {
- Console.WriteLine(str);
- }
- Console.WriteLine(strList.Count);
- Console.ReadKey();
- }
- }
- }
3)查找与更改
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Xml;
- namespace ChangeText
- {
- class Program
- {
- static voidMain(string[] args)
- {
- stringid ="tool";
- intnum =7;
- stringtext ="new Name";
- ChangeVal(id, num, text);
- }
- public static voidChangeVal(stringid,intnum,string text)
- {
- XmlDocument xmlDoc =new XmlDocument();
- xmlDoc.Load("ToolAndFrame.xml");
- // List<string> strList = new List<string>();XmlNodeList nodeList = xmlDoc.SelectSingleNode("ToolAndFrame").ChildNodes;//获取Employees节点的所有子节点
- foreach(XmlNode tempinnodeList)//遍历所有子节点
- {
- XmlElement elem = (XmlElement)temp;//将子节点类型转换为XmlElement类型
- if(elem.Name == id)//如果genre属性值为"张三"
- {
- Console.WriteLine(elem.GetAttribute("ID"));
- Console.WriteLine(elem.Name);
- XmlNodeList childElem = elem.ChildNodes;//继续获取xe子节点的所有子节点
- foreach(XmlNode nodeinchildElem)//遍历
- {
- XmlElement xml = (XmlElement)node;//转换类型
- if(xml.GetAttribute("ID") == num.ToString())
- {
- xml.InnerText = text;
- break;
- }
- }
- break;
- }
- }
- xmlDoc.Save("ToolAndFrame.xml");
- Console.ReadKey();
- }
- }
- }
本文查找与更改只是更改了属性,如果需要添加节点或者删除节点,只需要查找到相关节点以后,用命令 remvoechild 即可,最后一定要保存
Unity C# 数据持久化与 xml
来源: http://www.bubuko.com/infodetail-2147619.html