我很抱歉,如果这是一个重复的问题,但我做了一个搜索,但无法找到我正在寻找的信息。如果您也知道要引用的问题,请链接我!
但无论如何,我有一个创建类的函数
private Item CreateItem(string name, bool stackable, int amount, string discription)
{
Item item = new Item(name, stackable, amount, discription);
return item;
}
然后我有另一个找到统计数据的函数
private Item findItemStats(string name)
{
if (name == "Gold")
return CreateItem(name, false, 0, "Gold Bar");
return null;
}
这就是我用来添加项目的库存
internal void addItem(string name)
{
var item = findItemStats(name);
if (item == null)
Debug.LogError("Item not found!");
Instance.itemsToAdd.Add(item);
if (!inventory())
return;
if (inventory().activeInHierarchy)
{
placeItemsOnInventory();
sortItems();
}
我的问题是,有什么更好的方法来存储和检索项目统计数据。我曾经在一个私有服务器上托管,并且项目统计数据存储在.txt(或json w / e)中,然后将有一个类用于获取该数据并将其放置到被调用的项目中。只是想要一种方法来做到这一点,或者一种方法将数据存储在一个单独的类/文件中,方便访问和放置项目数据。
答案 0 :(得分:2)
这可能是一个相当广泛的主题,取决于您的需求。如果您只是在本地保存某些内容,最简单的选择是使用PlayerPrefs
PlayerPrefs.SetInt("Player Score", 10);
PlayerPrefs.Save();
//And to fetch:
var playerScore = PlayerPrefs.GetInt("Player Score");
对于更复杂的东西,您可以将数据序列化为数据格式,例如XML,JSON,二进制,CSV或您要导入的任何数据。这是二进制文件的示例。
public void SaveData()
{
if (!Directory.Exists("Saves"))
Directory.CreateDirectory("Saves");
BinaryFormatter formatter = new BinaryFormatter();
FileStream saveFile = File.Create("Saves/save.binary");
LocalCopyOfData = PlayerState.Instance.localPlayerData;
formatter.Serialize(saveFile, LocalCopyOfData);
saveFile.Close();
}
public void LoadData()
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream saveFile = File.Open("Saves/save.binary", FileMode.Open);
LocalCopyOfData = (PlayerStatistics)formatter.Deserialize(saveFile);
saveFile.Close();
}
More on Saving and Loading player data
或者,您可以使用工具将sqlite数据库集成到项目中。此代码看起来像.net。
中的标准数据库连接string conn = "URI=file:" + Application.dataPath + "/PickAndPlaceDatabase.s3db"; //Path to database.
IDbConnection dbconn;
dbconn = (IDbConnection) new SqliteConnection(conn);
dbconn.Open(); //Open connection to the database.
IDbCommand dbcmd = dbconn.CreateCommand();
string sqlQuery = "SELECT value,name, randomSequence " + "FROM PlaceSequence";
dbcmd.CommandText = sqlQuery;
IDataReader reader = dbcmd.ExecuteReader();
How to Setup Sqlite withn Unity3d
对于需要持久存储并在多台计算机上可用的数据。您可能需要考虑在适当的数据库或云托管数据存储服务上托管数据。一些例子:
谷歌搜索后端即服务也会产生许多其他好东西。天空是极限!〜
答案 1 :(得分:0)
Unity具有可用于存储数据的Scriptable对象,并且对象可以轻松存储在assets文件夹中。
https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/scriptable-objects