PlayerPrefs.SetInt("num",num); //setFloat setString
PlayerPrefs.GetInt("num",0); //getFloat getString
缺点:存储的数据过多时,不方便
第二种方式:xml常见的配置文件:``jsonxmlcsv`
unity一般使用的xml
下面是xml方式如何实现
1.首先如果需要使用xml文件,必须要引用 System.Xml命名空间
2.主要的功能就是实现对xml文件的增删改查的工作
3.因为是对 xml 文件进行操作,所以首先就是获取到xml的文件
第一步:创建一个xml的文件对象
//doucument 文件、文档的意思 XmlDocument xmlDoc = new XmlDocument(); //创建了一个xml的文件对象
第二步:根据给定的文件路径读取出xml文件中所有的信息,并存储在XmlDocument对象
所用的api是 使用xml的文件对象 .Load(string path)
传入的参数是文件的路径,根据文件所放的位置,传入相对路径和绝对路径,如果要使用相对路径就要将文件放入``bin文件夹下的Debug文件夹下,与.exe`在同一级下面(这里只是c#工程的路径,并非unity,后面介绍unity的路径的写法)
//绝对路径:带有盘符信息的路径都是绝对路径
//xmlDoc.Load(@"D:UsersDesktopxmltest.xml");//根据给定的文件路径读取出xml文件中所有的信息,并存储在XmlDocument对象
//相对路径:相对于项目的exe文件的路径
//@的关键字:取消/的转义字符的作用
xmlDoc.Load("xmltest.xml");
//在exe文件的下一级目录的写法
//xmlDoc.Load(@"Test/xmltest.xml");
//上一级 ../
// xmlDoc.Load(@"../../xmltest.xml");
第三步:获取xml文件中的根节点,和相应的子节点,以及子节点的属性
//找到根节点
XmlNode root = xmlDoc.SelectSingleNode("root");//在文件中根据对应的节点名找到对应的节点
//找到下面的子节点
XmlNodeList list = root.ChildNodes;//找到根节点下所有的子节点
//找到对应子节点的属性元素,获取相应的属性:用foreach遍历
foreach (var item in list)
{
//XmlNode无法直接解析节点中的内容
//Element:元素,元件
XmlElement element = item as XmlElement;
//attribute 属性
int id = int.Parse(element.GetAttribute("id"));
string name = element.GetAttribute("name");
Console.WriteLine("id: {0},name : {1}",id,name);
}
第四步:数据的存储:既然能够找到相应的属性,那么增删改查就不是难题
- 查找
//读取
static void ReadXml()
{
//doucument 文件、文档的意思
XmlDocument xmlDoc = new XmlDocument(); //创建了一个xml的文件对象
//绝对路径:带有盘符信息的路径都是绝对路径
//xmlDoc.Load(@"D:UsersDesktopxmltest.xml");//根据给定的文件路径读取出xml文件中所有的信息,并存储在XmlDocument对象
//相对路径:相对于项目的exe文件的路径
xmlDoc.Load("xmltest.xml");
//在exe文件的下一级目录的写法
// xmlDoc.Load(@"Test/xmltest.xml");
//上一级 ../
// xmlDoc.Load(@"../../xmltest.xml");
//node
XmlNode root = xmlDoc.SelectSingleNode("root");//在文件中根据对应的节点名找到对应的节点
XmlNodeList list = root.ChildNodes;//找到根节点下所有的子节点
foreach (var item in list)
{
//XmlNode无法直接解析节点中的内容
//Element:元素,元件
XmlElement element = item as XmlElement;
//attribute 属性
int id = int.Parse(element.GetAttribute("id"));
string name = element.GetAttribute("name");
Console.WriteLine("id: {0},name : {1}",id,name);
}
}
-
增加:xmlDoc.AppendChild()
分为创建xml文件和增加节点
//创建xml文件
static void CreateXml()
{
XmlDocument xmlDoc = new XmlDocument();
//creatElement 创建一个节点,参数是要创建的节点的节点名
XmlNode root = xmlDoc.CreateElement("root");
//AppendChild把参数的节点作为前面的节点的子节点
xmlDoc.AppendChild(root);
xmlDoc.Save("xmltest.xml");//只有执行过这句代码的时候,才会真正的在文件夹中创建xml文件并保存数据
}
//添加节点
static void AddNewNode(string username,string password)
{
//先打开要添加的xml文件
XmlDocument xmlDoc = new XmlDocument();
//找到根节点
xmlDoc.Load("xmltest.xml");
XmlNode root = xmlDoc.SelectSingleNode("root");
//创建新的账号密码节点,并将传入的参数存进去
XmlElement newElement = xmlDoc.CreateElement("account");//创建一个新的节点,并命名为account
newElement.SetAttribute("username", username);
newElement.SetAttribute("password", password);
root.AppendChild(newElement);
//保存文件
xmlDoc.Save("xmltest.xml");
}
-
删除:File.Delete(path)
-
改:直接赋值覆盖即可
具体实现直接参考下面整体代码的实现
第四步:保存(重要,必须) xmlDoc.Save(string path);
每次修改完都要对修改的东西进行保存
整个代码实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml; //如果需要使用xml文件操作,必须使用这个命名空间
using System.IO;
namespace xml
{
class Program
{
static void Main(string[] args)
{
ReadXml();
//CreateXml();
AddNewNode("张三", "123");
DeleteXml("xmltest.xml");
//Direction 文件夹操作所使用的类
//Direction.Exists判断给定的文件夹是否存在,存在返回true,不存在返回false
if (Directory.Exists("Config"))
{
//删除一个文件夹
Directory.Delete("Config");
}
else
{
//创建一个文件夹
Directory.CreateDirectory("Configs");
}
//Files文件操作用的类
if (File.Exists("xmltest.xml"))
{
File.Delete("xmltest.xml");
}
}
//增删改查
//读取
static void ReadXml()
{
//doucument 文件、文档的意思
XmlDocument xmlDoc = new XmlDocument(); //创建了一个xml的文件对象
//绝对路径:带有盘符信息的路径都是绝对路径
//xmlDoc.Load(@"D:UsersDesktopxmltest.xml");//根据给定的文件路径读取出xml文件中所有的信息,并存储在XmlDocument对象
//相对路径:相对于项目的exe文件的路径
xmlDoc.Load("xmltest.xml");
//在exe文件的下一级目录的写法
// xmlDoc.Load(@"Test/xmltest.xml");
//上一级 ../
// xmlDoc.Load(@"../../xmltest.xml");
//node
XmlNode root = xmlDoc.SelectSingleNode("root");//在文件中根据对应的节点名找到对应的节点
XmlNodeList list = root.ChildNodes;//找到根节点下所有的子节点
foreach (var item in list)
{
//XmlNode无法直接解析节点中的内容
//Element:元素,元件
XmlElement element = item as XmlElement;
//attribute 属性
int id = int.Parse(element.GetAttribute("id"));
string name = element.GetAttribute("name");
Console.WriteLine("id: {0},name : {1}",id,name);
}
}
//创建xml文件
static void CreateXml()
{
XmlDocument xmlDoc = new XmlDocument();
//creatElement 创建一个节点,参数是要创建的节点的节点名
XmlNode root = xmlDoc.CreateElement("root");
//AppendChild把参数的节点作为前面的节点的子节点
xmlDoc.AppendChild(root);
xmlDoc.Save("xmltest.xml");//只有执行过这句代码的时候,才会真正的在文件夹中创建xml文件并保存数据
}
//添加节点
static void AddNewNode(string username,string password)
{
//先打开要添加的xml文件
XmlDocument xmlDoc = new XmlDocument();
//找到根节点
xmlDoc.Load("xmltest.xml");
XmlNode root = xmlDoc.SelectSingleNode("root");
//创建新的账号密码节点,并将传入的参数存进去
XmlElement newElement = xmlDoc.CreateElement("account");//创建一个新的节点,并命名为account
newElement.SetAttribute("username", username);
newElement.SetAttribute("password", password);
root.AppendChild(newElement);
//保存文件
xmlDoc.Save("xmltest.xml");
}
//删除xml文件
static void DeleteXml(string path)
{
if (File.Exists(path))
{
File.Delete(path);
Console.WriteLine("文件删除成功!");
}
else
{
Console.WriteLine("文件不存在");
}
}
//删除对应的节点
static void RemoveNode(string username)
{
//打开文件
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("test.xml");
//从文件数据中找到对应的节点
XmlNode root = xmlDoc.SelectSingleNode("root");
XmlNodeList list = root.ChildNodes;
foreach (XmlElement item in list)
{
if(item.GetAttribute("username") == username)
{
//删除节点
//Removechile从该节点的子节点中移除参数传入的节点
root.RemoveChild(item);
break;
}
}
//删除节点
//保存
xmlDoc.Save("test.xml");
}
//修改节点值
static void ChangeNode(string username,string password)
{
//打开文件
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("test.xml");
//从文件数据中找到对应的节点
XmlNode root = xmlDoc.SelectSingleNode("root");
XmlNodeList list = root.ChildNodes;
foreach (XmlElement item in list)
{
if (item.GetAttribute("username") == username)
{
//修改节点
//Removechile从该节点的子节点中移除参数传入的节点
item.SetAttribute("password", password);
break;
}
}
//保存
xmlDoc.Save("test.xml");
}
}
}



