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