1、创建一个Json文件
Json代码格式:
[
{
"id": 0,
"name": "Sword",
"level": 100
},
{
"id": 1,
"name": "Knife",
"level": 100
}
]
2、创建一个JsonData 类型对象用存储解析后返回的数据
private JsonData itemData;
3、使用File.ReadAllText()方法传入需要的文本信息,再使用JsonMapper来对文本进行解析,我们Json文件放在
Assets/ItemAssets目录下,目录格式按照下面的格式写,最终解析好的数据存到“itemData”里面
itemData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/ItemAssets/items.json"));
4、因为把“itemData”里面的数据信息分别提取出来,所以现在创建单独一个类Item用于存储和获取“itemData里面的信息”
public class Item{
public int ID {get;set;}
public string Name {get;set;}
public int Level {get;set;}
//构造函数
public Item (int _id,string _name,int _level)
{
this.ID = _id;
this.Name = _name;
this.Level = _level;
}
}
5、这里创建一个方法来存储数据,由于每个物品都是一个单独的Item,需要再创建数组或者List来存储这些Item,database[i]就是解析出来的Item数据信息,可以Debug.Log(database[0].Name) 这样调试查看信息对不对
private List<Item> database = new List<Item>();
//创建一个方法
void SaveItemData()
{
for(int i = 0; i < itemData.Count; i++)
{
database.Add(new Item((int)itemData[i]["id"],itemData[i]["name"].ToString(),(int)itemData[i]["level"]));
}
}
6、创建一个新方法,使用ID来查找物品的信息
public Item GetItemData(int _id)
{
for(int i = 0; i < database.Count; i++)
{
if(_id == database[i].ID)
{
return database[i];
}
}
return null;
}
附代码:
public class ItemDatabase : MonoBehaviour{
private JsonData itemData;
private List<Item> database = new List<Item> ();
void Awake()
{
itemData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/ItemAssets/items.json"));
SaveItemData();
}
void SaveItemData()
{
for(int i = 0; i < itemData.Count; i++)
{
database.Add(new Item((int)itemData[i]["id"],itemData[i]["name"].ToString(),(int)itemData[i]["level"]));
}
}
public Item GetItemData(int _id)
{
for(int i = 0; i < database.Count; i++)
{
if(_id == database[i].ID)
{
return database[i];
}
}
return null;
}
}
public class Item{
public int ID {get;set;}
public string Name {get;set;}
public int Level {get;set;}
//构造函数
public Item (int _id,string _name,int _level)
{
this.ID = _id;
this.Name = _name;
this.Level = _level;
}
}