数据本地的存储

第一种方式:unity自带的存储方式

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:\Users\Desktop\xmltest.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);}

第四步:数据的存储:既然能够找到相应的属性,那么增删改查就不是难题

  1. 查找
  //读取static void ReadXml(){//doucument 文件、文档的意思XmlDocument xmlDoc = new XmlDocument(); //创建了一个xml的文件对象//绝对路径:带有盘符信息的路径都是绝对路径//xmlDoc.Load(@"D:\Users\Desktop\xmltest.xml");//根据给定的文件路径读取出xml文件中所有的信息,并存储在XmlDocument对象//相对路径:相对于项目的exe文件的路径xmlDoc.Load("xmltest.xml");//在exe文件的下一级目录的写法//  xmlDoc.Load(@"Test/xmltest.xml");//上一级 ../// xmlDoc.Load(@"../../xmltest.xml");//nodeXmlNode 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);}}
  1. 增加: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");//创建一个新的节点,并命名为accountnewElement.SetAttribute("username", username);newElement.SetAttribute("password", password);root.AppendChild(newElement);//保存文件xmlDoc.Save("xmltest.xml");}
  1. 删除:File.Delete(path)

  2. 改:直接赋值覆盖即可

    具体实现直接参考下面整体代码的实现

第四步:保存(重要,必须) 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,不存在返回falseif (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:\Users\Desktop\xmltest.xml");//根据给定的文件路径读取出xml文件中所有的信息,并存储在XmlDocument对象//相对路径:相对于项目的exe文件的路径xmlDoc.Load("xmltest.xml");//在exe文件的下一级目录的写法//  xmlDoc.Load(@"Test/xmltest.xml");//上一级 ../// xmlDoc.Load(@"../../xmltest.xml");//nodeXmlNode 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");//创建一个新的节点,并命名为accountnewElement.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");}}
}

unity3D数据的本地存储(xml的方式)相关推荐

  1. json数据和本地存储

    json数据和本地存储 文章目录 json数据和本地存储 json数据 什么是JSON 为什么使用JSON 语法规则 转换 深拷贝 本地存储 特性 window.sessionStorage wind ...

  2. 【Vue 快速入门系列】Vue数据实现本地存储、自定义事件绑定、全局事件总线、$nextTick的使用

    文章目录 一.本地存储 1.概念 2.接口 3.实际操作 二.自定义事件绑定 1.自定义事件使用过程 2.绑定自定义事件的语法 3.其他注意事项 三.全局事件总线 1.全局事件总线概念 2.全局事件总 ...

  3. 本地存储三种方式cookie、localStorage、sessionStorage的详细介绍

    前言 网页刷新的时候数据会被清空,这时候就需要用到存储技术.前端本地存储的方式有三种,分别是cookie.localStorage.sessionStorage.在前端面试过程中,经常会被问及这些存储 ...

  4. 即构服务端录制SDK上线,音视频数据实现本地存储录制回放

    日常生活中,我们可能会有这些需求: 看到有趣的直播内容,会想能不能保存下来再次回看: 报名了线上的课程,家长想了解孩子的学习状态,希望能看到在线学习的过程: 金融行业,管理人员需要定期调取视频客服的服 ...

  5. 浏览器上实现数据的本地存储・小结

    在客户端存储数据时,我们一般都用cookie(不敏感数据),但是在客户端越来越富的今天,cookie可存储的量(每个域最大4k)实在是小. 在HTML5中有localStorage可使用,但是这就抛弃 ...

  6. 我用JS做了一个记账本 [数据可本地存储] 附万字详解

    目录 一.本地操作

  7. 前端学习(3037):vue+element今日头条管理-把数据放到本地存储

  8. C#数据本地存储方案之SQLite

    即使是做网络应用,在断线情况下,也需要考虑数据的本地存储.在SQLite出现之前,数据量大的情况下,我们一直使用ACCESS,数据量小,则文件存储.ACCESS不支持事务原子性,在断电情况下(这种情况 ...

  9. HTML5 localStorage本地存储

    介绍 localStorage(本地存储)的使用方式.包括对存储对象的添加.修改.删除.事件触发等操作. 目录 1. 介绍 1.1 说明 1.2 特点 1.3 浏览器最小版本支持 1.4 适合场景 2 ...

最新文章

  1. 【c语言】测量字符串长度
  2. c# socket 解决粘包,半包
  3. hdu4280(最大流)
  4. 成本中心组和标准层次有何区别
  5. vue项目通过directives指令实现vue实现盒子的移动;vue拖拽盒子;vue移动;
  6. 【Mybatis-Plus】(四)分页、乐观锁插件 通用枚举 多数据源
  7. 深入理解Tomcat和Jetty源码之第四篇tomcat系统架构上:容器是如何设计的
  8. PHP更新小程序,微信小程序Tab页切换更新数据详细介绍
  9. GDB调试字符数组时指针和数组区别的体现
  10. 批量抓取QQ群成员的QQ号、昵称、群名片
  11. 高中计算机会考基本知识点,高中计算机会考基本知识点
  12. 计算机学硕答辩,东南大学计算机硕士毕业答辩基本流程(参考).doc
  13. mac下面如何修改只读文件(Read-only file system)
  14. 公寓上网新认证方式破解研究
  15. 制作滚球游戏学习Unity3D
  16. ad-hoc,软ap(windows无线网卡制作WIFI热点)
  17. 数据仓库、数据集市和数据湖有什么区别?
  18. 布线光纤方面的知识都在这了,千万别错过!
  19. Cisco、华为、H3C交换机配置文件自动备份
  20. 二十四节气-小寒。文案、海报分享,小寒料峭 年味渐浓。

热门文章

  1. python哪里最难用_Python里最难的Asyncio,这里有一份非常适合小白的教程
  2. 【转载】用Python计算身份证校验码
  3. arcmap制作地闪密度专题图
  4. 十分钟入门Visio,不行来砍我!
  5. 偏振器件传输矩阵matlab编程,关于传输矩阵法模拟光子晶体的MATLAB编程
  6. vue+netty+redis微信猜数对战小游戏
  7. OpenGL学习笔记——坐标转换
  8. PC端自适应-rem
  9. C#和JQ判断移动端还是PC端
  10. Arduino 控制RFID读写器读写 IC卡