日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity的数据本地储存的集中方法

發布時間:2023/12/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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和這一樣)
命名空間

using System.Xml; using System.IO;

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;

foreach (XmlElement personEle in personsEle){XmlElement name = personEle.ChildNodes[0]as XmlElement;XmlElement age = personEle.ChildNodes[1] as XmlElement;XmlElement strenth = personEle.ChildNodes[2] as XmlElement;XmlElement speed = personEle.ChildNodes[2] as XmlElement;Console.WriteLine(name.InnerText + age.InnerText + strenth.InnerText+speed.InnerText);}}


5)節點的刪除
static void DeleteXML()
{
XmlDocument doc = new XmlDocument();
doc.Load(@“C:/Users/Administrator/Desktop/student.xml”);

XmlNode player = doc.SelectSingleNode("player");XmlNodeList personsEle = player.ChildNodes;foreach (XmlElement personEle in personsEle){if (personEle.Name.Equals("player01")){player.RemoveChild(personEle);//Console.WriteLine("delete success");}}doc.Save(@"C:/Users/Administrator/Desktop/student.xml");}

補:多層級XML中的元素查找
原XML文件:

比如將player下的equipment的子類的SWORD改變。
方法一:白癡方法:

static void searchAndChange(){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")){XmlNodeList grandsons = playerson.ChildNodes;foreach (XmlElement grandson in grandsons){if (grandson.Name.Equals("equipment")){XmlNode finalselect = grandson.SelectSingleNode("sword");finalselect.InnerText = "japansword";Console.WriteLine("success in searchAndChange");}}}}doc.Save(@"C:/Users/Administrator/Desktop/check.xml");}

結果如下:

方法二:遞歸方法:
不會
方法三: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的数据本地储存的集中方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。