unity3D数据的本地存储(xml的方式)
數(shù)據(jù)本地的存儲
第一種方式:unity自帶的存儲方式
PlayerPrefs.SetInt("num",num); //setFloat setString PlayerPrefs.GetInt("num",0); //getFloat getString缺點(diǎn):存儲的數(shù)據(jù)過多時,不方便
第二種方式:xml
常見的配置文件:``jsonxmlcsv`
unity一般使用的xml
下面是xml方式如何實(shí)現(xiàn)
1.首先如果需要使用xml文件,必須要引用 System.Xml命名空間
2.主要的功能就是實(shí)現(xiàn)對xml文件的增刪改查的工作
3.因?yàn)槭菍?xml 文件進(jìn)行操作,所以首先就是獲取到xml的文件
第一步:創(chuàng)建一個xml的文件對象
//doucument 文件、文檔的意思XmlDocument xmlDoc = new XmlDocument(); //創(chuàng)建了一個xml的文件對象第二步:根據(jù)給定的文件路徑讀取出xml文件中所有的信息,并存儲在XmlDocument對象
所用的api是 使用xml的文件對象 .Load(string path)
傳入的參數(shù)是文件的路徑,根據(jù)文件所放的位置,傳入相對路徑和絕對路徑,如果要使用相對路徑就要將文件放入``bin文件夾下的Debug文件夾下,與.exe`在同一級下面(這里只是c#工程的路徑,并非unity,后面介紹unity的路徑的寫法)
//絕對路徑:帶有盤符信息的路徑都是絕對路徑//xmlDoc.Load(@"D:\Users\Desktop\xmltest.xml");//根據(jù)給定的文件路徑讀取出xml文件中所有的信息,并存儲在XmlDocument對象//相對路徑:相對于項(xiàng)目的exe文件的路徑//@的關(guān)鍵字:取消/的轉(zhuǎn)義字符的作用xmlDoc.Load("xmltest.xml");//在exe文件的下一級目錄的寫法//xmlDoc.Load(@"Test/xmltest.xml");//上一級 ../// xmlDoc.Load(@"../../xmltest.xml");第三步:獲取xml文件中的根節(jié)點(diǎn),和相應(yīng)的子節(jié)點(diǎn),以及子節(jié)點(diǎn)的屬性
//找到根節(jié)點(diǎn) XmlNode root = xmlDoc.SelectSingleNode("root");//在文件中根據(jù)對應(yīng)的節(jié)點(diǎn)名找到對應(yīng)的節(jié)點(diǎn)//找到下面的子節(jié)點(diǎn) XmlNodeList list = root.ChildNodes;//找到根節(jié)點(diǎn)下所有的子節(jié)點(diǎn)//找到對應(yīng)子節(jié)點(diǎn)的屬性元素,獲取相應(yīng)的屬性:用foreach遍歷 foreach (var item in list){//XmlNode無法直接解析節(jié)點(diǎn)中的內(nèi)容//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);}第四步:數(shù)據(jù)的存儲:既然能夠找到相應(yīng)的屬性,那么增刪改查就不是難題
增加:xmlDoc.AppendChild()
分為創(chuàng)建xml文件和增加節(jié)點(diǎn)
刪除:File.Delete(path)
改:直接賦值覆蓋即可
具體實(shí)現(xiàn)直接參考下面整體代碼的實(shí)現(xiàn)
第四步:保存(重要,必須) xmlDoc.Save(string path);
每次修改完都要對修改的東西進(jìn)行保存
整個代碼實(shí)現(xiàn):
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{//創(chuàng)建一個文件夾Directory.CreateDirectory("Configs");}//Files文件操作用的類if (File.Exists("xmltest.xml")){File.Delete("xmltest.xml");}}//增刪改查//讀取static void ReadXml(){//doucument 文件、文檔的意思XmlDocument xmlDoc = new XmlDocument(); //創(chuàng)建了一個xml的文件對象//絕對路徑:帶有盤符信息的路徑都是絕對路徑//xmlDoc.Load(@"D:\Users\Desktop\xmltest.xml");//根據(jù)給定的文件路徑讀取出xml文件中所有的信息,并存儲在XmlDocument對象//相對路徑:相對于項(xiàng)目的exe文件的路徑xmlDoc.Load("xmltest.xml");//在exe文件的下一級目錄的寫法// xmlDoc.Load(@"Test/xmltest.xml");//上一級 ../// xmlDoc.Load(@"../../xmltest.xml");//nodeXmlNode root = xmlDoc.SelectSingleNode("root");//在文件中根據(jù)對應(yīng)的節(jié)點(diǎn)名找到對應(yīng)的節(jié)點(diǎn)XmlNodeList list = root.ChildNodes;//找到根節(jié)點(diǎn)下所有的子節(jié)點(diǎn)foreach (var item in list){//XmlNode無法直接解析節(jié)點(diǎn)中的內(nèi)容//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);}}//創(chuàng)建xml文件static void CreateXml(){XmlDocument xmlDoc = new XmlDocument();//creatElement 創(chuàng)建一個節(jié)點(diǎn),參數(shù)是要創(chuàng)建的節(jié)點(diǎn)的節(jié)點(diǎn)名XmlNode root = xmlDoc.CreateElement("root");//AppendChild把參數(shù)的節(jié)點(diǎn)作為前面的節(jié)點(diǎn)的子節(jié)點(diǎn)xmlDoc.AppendChild(root);xmlDoc.Save("xmltest.xml");//只有執(zhí)行過這句代碼的時候,才會真正的在文件夾中創(chuàng)建xml文件并保存數(shù)據(jù)}//添加節(jié)點(diǎn)static void AddNewNode(string username,string password){//先打開要添加的xml文件XmlDocument xmlDoc = new XmlDocument();//找到根節(jié)點(diǎn)xmlDoc.Load("xmltest.xml");XmlNode root = xmlDoc.SelectSingleNode("root");//創(chuàng)建新的賬號密碼節(jié)點(diǎn),并將傳入的參數(shù)存進(jìn)去XmlElement newElement = xmlDoc.CreateElement("account");//創(chuàng)建一個新的節(jié)點(diǎn),并命名為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("文件不存在");}}//刪除對應(yīng)的節(jié)點(diǎn)static void RemoveNode(string username){//打開文件XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load("test.xml");//從文件數(shù)據(jù)中找到對應(yīng)的節(jié)點(diǎn)XmlNode root = xmlDoc.SelectSingleNode("root");XmlNodeList list = root.ChildNodes;foreach (XmlElement item in list){if(item.GetAttribute("username") == username){//刪除節(jié)點(diǎn)//Removechile從該節(jié)點(diǎn)的子節(jié)點(diǎn)中移除參數(shù)傳入的節(jié)點(diǎn)root.RemoveChild(item);break;}}//刪除節(jié)點(diǎn)//保存xmlDoc.Save("test.xml");}//修改節(jié)點(diǎn)值static void ChangeNode(string username,string password){//打開文件XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load("test.xml");//從文件數(shù)據(jù)中找到對應(yīng)的節(jié)點(diǎn)XmlNode root = xmlDoc.SelectSingleNode("root");XmlNodeList list = root.ChildNodes;foreach (XmlElement item in list){if (item.GetAttribute("username") == username){//修改節(jié)點(diǎn)//Removechile從該節(jié)點(diǎn)的子節(jié)點(diǎn)中移除參數(shù)傳入的節(jié)點(diǎn)item.SetAttribute("password", password);break;}}//保存xmlDoc.Save("test.xml");}} }總結(jié)
以上是生活随笔為你收集整理的unity3D数据的本地存储(xml的方式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何高效搜索公众号文章(r11笔记第35
- 下一篇: 微信小程序开发基础知识2(黑马)