栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

unity3D数据的本地存储(xml的方式)

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

unity3D数据的本地存储(xml的方式)

数据本地的存储 第一种方式: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: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);
            }

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

  1. 查找
  //读取
        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);
            }
        }
  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");//创建一个新的节点,并命名为account
            newElement.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,不存在返回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");
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/898368.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号