我有一个游戏,我需要存储以下数据:
有5个国家/地区,每个国家5个城市,每个城市x个级别。
存储这些数据的最佳方法是什么,我希望存储关卡详细信息,例如完成,花费的时间等
然后我要通过Leveldata [countryindex,cityindex]访问级别数据。
我想到了多维列表或字典,但想知道你们认为最佳实践是什么吗?
我还需要将此数据保存为JSON。
谢谢
答案 0 :(得分:1)
基里尔·波兰丘克(Kirill Polishchuk)提到的类的结构,标记为可序列化,但是带有一些数组运算符的重载将满足您的需求。
然后,您可以使用Unity内置的JsonUtility序列化为json并写入磁盘(或PlayerPrefs作为字符串)。在下面的代码中,我将一个Save and Load方法添加到为您执行此操作的LevelData类中。
tail -f <logfile>
您可能需要添加用于创建国家和城市对象的设置器。或者,如果您将LevelData作为公共变量添加到脚本中,则该结构将在Unity编辑器中可见。
并添加和保存级别:
[System.Serializable]
public class Level
{
public int Score;
// ...
}
[System.Serializable]
public class City
{
public List<Level> Levels = new List<Level>();
}
[System.Serializable]
public class Country
{
public List<City> Cities = new List<City>();
public City this[int cityIndex]
{
get
{
if (cityIndex < 0 || cityIndex >= Cities.Count)
{
return null;
}
else
{
return Cities[cityIndex];
}
}
}
}
[System.Serializable]
public class LevelData
{
public List<Country> Countries = new List<Country>();
public List<Level> this[int countryIndex, int cityIndex]
{
get
{
if (countryIndex < 0 || countryIndex >= Countries.Count)
{
return null;
}
else
{
City city = Countries[countryIndex][cityIndex];
if (city != null)
{
return city.Levels;
}
else
{
return null;
}
}
}
}
public void Save(string path)
{
string json = JsonUtility.ToJson(this);
// Note: add IO exception handling here!
System.IO.File.WriteAllText(path, json);
}
public static LevelData Load(string path)
{
// Note: add check that the path exists, and also a try/catch for parse errors
LevelData data = JsonUtility.FromJson<LevelData>(path);
if (data != null)
{
return data;
}
else
{
return new LevelData();
}
}
答案 1 :(得分:0)
创建适当的数据模型,例如:
public class Level
{
public TimeSpan TimeTaken { get; set; }
// level specific data
}
public class City
{
public IList<Level> Levels { get; set; }
}
public class Country
{
public IList<City> Cities { get; set; }
}
然后,您可以简单地使用JSON.NET对JSON进行序列化/反序列化,例如:
string json = JsonConvert.SerializeObject(country);