C# 在字典或类似的东西中存储类信息
我很抱歉,如果这是一个重复的问题,但我做了搜索,无法找到我正在寻找的信息。如果你也知道一个问题,请联系我 但不管怎样,我有一个创建类的函数C# 在字典或类似的东西中存储类信息,c#,unity3d,C#,Unity3d,我很抱歉,如果这是一个重复的问题,但我做了搜索,无法找到我正在寻找的信息。如果你也知道一个问题,请联系我 但不管怎样,我有一个创建类的函数 private Item CreateItem(string name, bool stackable, int amount, string discription) { Item item = new Item(name, stackable, amount, discription); return item; } 然后我有另一个函数
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();
}
我的问题是,有什么更好的方法来存储和检索物品统计数据。我曾经托管过一个私有服务器,在这个服务器上,item stats存储在一个.txt(或json w/e)中,然后会有一个类来获取数据并将其放置到被调用的项中。我只是想知道一种方法,或者是一种方法,将数据存储在一个单独的类/文件中,方便访问和放置项目数据 Unity具有可用于存储数据的脚本化对象,这些对象存储在资产文件夹中,因此易于访问
这是一个相当开放的话题,取决于您的需要。如果您只是在本地保存某些内容,最简单的选择是使用
PlayerPrefs
PlayerPrefs示例:
序列化示例代码段。
对于更复杂的内容,您可以将数据序列化为数据格式,如XML、JSON、binary、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();
}
SqlLite
或者,您可以使用工具将sqlite db集成到项目中。此代码看起来像.net中的标准db连接
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();
云主机
用于需要在多台计算机上持久化和可用的数据。您可能想考虑在适当的数据库或云托管数据存储服务上托管数据。一些例子:
谷歌后端作为一项服务也会带来很多其他好处。天空是极限~ 我知道unity可以在预置中存储数据。在场景中创建项目时,统计信息将从存储位置传输到预设。我只需要一个在游戏开始前创建的物品数据列表,这样当我将物品添加到我的库存时,它有一个比我当前的findItemStats更干净的地方可以查看。因为只有100件物品后,这个会很难看。我会先把需要的信息存储在预制件上。但这使得预制件的装载量更大(可能不会太大,但仍然是mroe),如果数据直接存储在物品上,那么使用作弊引擎将物品添加到游戏中也更容易。此外,编辑项目统计信息更为复杂,因为wayScriptable对象不是预设的,它们是一个数据对象,如纹理或音频剪辑。“这对于仅用于存储数据的资产最有用。”这似乎像是在检索项目后保存数据。在你拿到物品之前,我需要一种存储数据的方法,这样游戏就有了一个干净且易于编辑的地方来寻找物品的初始状态(堆叠和数量可能会让我的代码使用混乱)啊,这些数据仍然非常有用,我会经常使用你的答案,但我不确定这是否解决了我最初的问题,即在获取项目之前存储数据的位置。您可以在init安装或unity事件的数据加载上运行任何提到的孤子。或者从xml\json\csv\text开始,然后加载它。哦,是的,这是一个很好的观点,我想我的想法不同啊,好吧,我想这就是我需要的!!非常感谢mandon别忘了即使parse.com关闭了,也有很多优秀的解析可能性,例如back4app(很高兴,它与parse几乎相同)
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();