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