Unity的数据本地储存的集中方法
一)
 PlayerPrefab
 使用的是Unity自帶的PlayerPrefab這個(gè)類 但是這個(gè)類只能保存 Int float string 三種類型
 注:其本質(zhì)為在本地文件寫入一個(gè)XML文件
 PlayerPrefs數(shù)據(jù)存儲(chǔ)在哪里?
 1.在Mac OS X上存儲(chǔ)在~/Library/PlayerPrefs文件夾,名為unity.[company name].[product name].plist,這里company和product名是在project Setting中設(shè)置的
 2.在windows下,playerPrefs被存儲(chǔ)在注冊(cè)的HKCU\Software[company name][product name]鍵下,這里company和product名是在project setting中設(shè)置的。
 3.在Android上,數(shù)據(jù)存儲(chǔ)(持久化)在設(shè)備上。數(shù)據(jù)保存在SharedPreferences中。
PlayerPrefs有哪些方法?
 分為五類:SetXXX , GetXXX , DeleteXXX, HasKey , Save.
 1.SetXXX : 是你要儲(chǔ)存的數(shù)據(jù)類型,這里必須是一組鍵值對(duì),第一個(gè)參數(shù)是Key,第二個(gè)參數(shù)是對(duì)應(yīng)的Value。
 2.GetXXX:這里是獲取數(shù)據(jù)的函數(shù),只有一個(gè)參數(shù)Key,用來獲取對(duì)應(yīng)Key的Value.
 3.HasKey: 這個(gè)可以用來做判斷。比如有兩組數(shù)據(jù)一組有XX這個(gè)Key,另一組沒有XX這個(gè)Key,這個(gè)時(shí)候我們就可以對(duì)這兩組數(shù)據(jù)進(jìn)行差異化操作。
 4.DeleteXX:用于刪除數(shù)據(jù)。
 5.Save:用于在突發(fā)退出程序時(shí),保存數(shù)據(jù)以備恢復(fù)時(shí)使用,但是會(huì)導(dǎo)致程序間斷所以不建議調(diào)用。
 官方地址:https://docs.unity3d.com/ScriptReference/PlayerPrefs.html
 二)XML實(shí)現(xiàn)
 用.net 控制臺(tái)實(shí)現(xiàn)的(Unity和這一樣)
 命名空間
1)創(chuàng)建XML
 XML的學(xué)習(xí):https://www.runoob.com/xml/xml-tutorial.html
 .net/C#文檔:https://docs.microsoft.com/zh-cn/dotnet/api/system.xml?view=netcore-3.1
 public static void createXML()
 {
 //新建XmlDocument對(duì)象
 XmlDocument doc = new XmlDocument();
 //根節(jié)點(diǎn)
 XmlElement root = doc.CreateElement(“player”);
 //playerID節(jié)點(diǎn)
 XmlElement playerID = doc.CreateElement(“player01”);
 //name
 XmlElement name = doc.CreateElement(“name”);
 name.InnerText = “TOM”;
 //age
 XmlElement age = doc.CreateElement(“age”);
 age.InnerText = “12”;
 //strenth
 XmlElement strenth = doc.CreateElement(“strenth”);
 strenth.InnerText = “100”;
 //speed
 XmlElement speed = doc.CreateElement(“speed”);
 speed.InnerText = “10”;
 playerID.AppendChild(name);
 playerID.AppendChild(age);
 playerID.AppendChild(strenth);
 playerID.AppendChild(speed);
 root.AppendChild(playerID);
 doc.AppendChild(root);
 doc.Save(@“C:/Users/Administrator/Desktop/student.xml”);
 //Console.WriteLine(“success”);
 }
 實(shí)現(xiàn)結(jié)果如下
 
 2)添加XML
 public static void AddXML()
 {
 //新建XmlDocument對(duì)象
 XmlDocument doc = new XmlDocument();
 //載入文件
 try
 {
 doc.Load(@“C:/Users/Administrator/Desktop/student.xml”);
 }
 catch (System.Xml.XmlException)
 {
 throw new Exception(“l(fā)oad fail”);
 }
 //查找要插入數(shù)據(jù)的節(jié)點(diǎn)
 XmlNode newxmlnode = doc.SelectSingleNode(“player”);
 //創(chuàng)建新的節(jié)點(diǎn)
 XmlElement newplayerID = doc.CreateElement(“player02”);
 XmlElement name = doc.CreateElement(“name”);
 name.InnerText = “jerry”;
 //age
 XmlElement age = doc.CreateElement(“age”);
 age.InnerText = “14”;
 //strenth
 XmlElement strenth = doc.CreateElement(“strenth”);
 strenth.InnerText = “105”;
 //speed
 XmlElement speed = doc.CreateElement(“speed”);
 speed.InnerText = “15”;
 newplayerID.AppendChild(name);
 newplayerID.AppendChild(age);
 newplayerID.AppendChild(strenth);
 newplayerID.AppendChild(speed);
 newxmlnode.AppendChild(newplayerID);
 doc.Save(@“C:/Users/Administrator/Desktop/student.xml”);
 Console.WriteLine(“add success”);
 }
 結(jié)果如下:
 
 3)數(shù)據(jù)的更新
 比如把player02節(jié)點(diǎn)下的speed更改為10
 public static void UpdateXML()
 {
 XmlDocument doc = new XmlDocument();
 //載入文件
 try
 {
 doc.Load(@“C:/Users/Administrator/Desktop/student.xml”);
 }
 catch (System.Xml.XmlException)
 {
 throw new Exception(“l(fā)oad fail”);
 }
 XmlNode player = doc.SelectSingleNode(“player”);
 XmlNodeList charactors = player.ChildNodes;
 foreach (XmlElement charactor in charactors)
 {
 if (charactor.Name.Equals(“player02”))
 {
 XmlNode son = charactor.SelectSingleNode(“speed”);
 son.InnerText = “10”;
 Console.WriteLine(“update success”);
 }
 }
 //寫入文檔
 doc.Save(@“C:/Users/Administrator/Desktop/student.xml”);
 }
 結(jié)果如下
 
 4)數(shù)據(jù)的讀取
 static void ReadXML()
 {
 XmlDocument doc = new XmlDocument();
 string xmlfile = @“C:/Users/Administrator/Desktop/student.xml”;
 doc.Load(xmlfile);
 //獲取根節(jié)點(diǎn)XmlElement表示節(jié)點(diǎn)(元素)
 XmlNode player = doc.SelectSingleNode(“player”);
 XmlNodeList personsEle = player.ChildNodes;
 5)節(jié)點(diǎn)的刪除
 static void DeleteXML()
 {
 XmlDocument doc = new XmlDocument();
 doc.Load(@“C:/Users/Administrator/Desktop/student.xml”);
補(bǔ):多層級(jí)XML中的元素查找
 原XML文件:
 
 比如將player下的equipment的子類的SWORD改變。
 方法一:白癡方法:
結(jié)果如下:
 
 方法二:遞歸方法:
 不會(huì)
 方法三:C#的LINQ
 方法四:XML的函數(shù)
 例:
 static void recursionSearch()
 {
 XmlDocument doc = new XmlDocument();
 //載入文件
 try
 {
 doc.Load(@“C:/Users/Administrator/Desktop/check.xml”);
 }
 catch (System.Xml.XmlException)
 {
 throw new Exception(“l(fā)oad fail”);
 }
 XmlNode player = doc.SelectSingleNode(“player”);
 XmlNodeList playerID = player.ChildNodes;
 foreach (XmlElement playerson in playerID)
 {
 if (playerson.Name.Equals(“player02”))
 {
 XmlNode son = playerson.LastChild.SelectSingleNode(“sword”);
 son.InnerText = “Englishsword”;
 }
 }
 doc.Save(@“C:/Users/Administrator/Desktop/check.xml”);
 }
三)JSON的數(shù)據(jù)保存
 4)Unityd的ScriptableObject(實(shí)質(zhì)為保存一個(gè)二級(jí)制文件)
 
 可以看一下B站UP主他的視頻。
https://www.bilibili.com/video/BV1CJ41157DR
總結(jié)
以上是生活随笔為你收集整理的Unity的数据本地储存的集中方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 个人的敏感信息需要怎么进行安全保护的一些
- 下一篇: mysql 函数from_unixtim
