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:\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);}第四步:數據的存儲:既然能夠找到相應的屬性,那么增刪改查就不是難題
增加:xmlDoc.AppendChild()
分為創建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,不存在返回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的方式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何高效搜索公众号文章(r11笔记第35
- 下一篇: 微信小程序开发基础知识2(黑马)