Unity的数据本地储存的集中方法
一)
PlayerPrefab
使用的是Unity自帶的PlayerPrefab這個類 但是這個類只能保存 Int float string 三種類型
注:其本質(zhì)為在本地文件寫入一個XML文件
PlayerPrefs數(shù)據(jù)存儲在哪里?
1.在Mac OS X上存儲在~/Library/PlayerPrefs文件夾,名為unity.[company name].[product name].plist,這里company和product名是在project Setting中設(shè)置的
2.在windows下,playerPrefs被存儲在注冊的HKCU\Software[company name][product name]鍵下,這里company和product名是在project setting中設(shè)置的。
3.在Android上,數(shù)據(jù)存儲(持久化)在設(shè)備上。數(shù)據(jù)保存在SharedPreferences中。
PlayerPrefs有哪些方法?
分為五類:SetXXX , GetXXX , DeleteXXX, HasKey , Save.
1.SetXXX : 是你要儲存的數(shù)據(jù)類型,這里必須是一組鍵值對,第一個參數(shù)是Key,第二個參數(shù)是對應(yīng)的Value。
2.GetXXX:這里是獲取數(shù)據(jù)的函數(shù),只有一個參數(shù)Key,用來獲取對應(yīng)Key的Value.
3.HasKey: 這個可以用來做判斷。比如有兩組數(shù)據(jù)一組有XX這個Key,另一組沒有XX這個Key,這個時候我們就可以對這兩組數(shù)據(jù)進行差異化操作。
4.DeleteXX:用于刪除數(shù)據(jù)。
5.Save:用于在突發(fā)退出程序時,保存數(shù)據(jù)以備恢復(fù)時使用,但是會導(dǎo)致程序間斷所以不建議調(diào)用。
官方地址:https://docs.unity3d.com/ScriptReference/PlayerPrefs.html
二)XML實現(xiàn)
用.net 控制臺實現(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對象
XmlDocument doc = new XmlDocument();
//根節(jié)點
XmlElement root = doc.CreateElement(“player”);
//playerID節(jié)點
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”);
}
實現(xiàn)結(jié)果如下
2)添加XML
public static void AddXML()
{
//新建XmlDocument對象
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é)點
XmlNode newxmlnode = doc.SelectSingleNode(“player”);
//創(chuàng)建新的節(jié)點
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é)點下的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é)點XmlElement表示節(jié)點(元素)
XmlNode player = doc.SelectSingleNode(“player”);
XmlNodeList personsEle = player.ChildNodes;
5)節(jié)點的刪除
static void DeleteXML()
{
XmlDocument doc = new XmlDocument();
doc.Load(@“C:/Users/Administrator/Desktop/student.xml”);
補:多層級XML中的元素查找
原XML文件:
比如將player下的equipment的子類的SWORD改變。
方法一:白癡方法:
結(jié)果如下:
方法二:遞歸方法:
不會
方法三: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(實質(zhì)為保存一個二級制文件)
可以看一下B站UP主他的視頻。
https://www.bilibili.com/video/BV1CJ41157DR
總結(jié)
以上是生活随笔為你收集整理的Unity的数据本地储存的集中方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人的敏感信息需要怎么进行安全保护的一些
- 下一篇: docx行间距怎么设置_word全文行距