在开发过程这种,经常需要存储数据,有存就有读。今天就来说说JSON数据的存储和读取。
我这里的例子是拾取装备,把装备的名字,数量和信息存进JSON文件中。
首先,先写一个装备的基本属性的类
[CreateAssetMenu(fileName = "Clonese", menuName = "NewClonese/Clonese")]//创建一个菜单栏
public class Clonese :ScriptableObject
{
public string CName;//装备名字
public int CNum;//装备数量
[TextArea]//创建一个文本域
public string CInfo;//装备信息
}
创建一个list集合存储数据
[CreateAssetMenu(fileName = "Jihe", menuName = "NewJihe/Jihe")]
public class Jihe : ScriptableObject
{
public List<Clonese> CList = new List<Clonese>();
}
创建出来的菜单栏,在这里添加出来
建一个文件管理
bag是背包
dao和jian是两件装备
创建出来在里面修改信息。
接下来就是捡到装备把装备信息存进JSON文件中,和需要的时候读取出来
public class MyBag : MonoBehaviour {
public Clonese[] cloneses;//武器的3个属性集合
public Jihe jihe;//list集合类
void Update()
{
if (Go.Getgo().b==true)//销毁敌人时,随机生成一把武器
{
int i=Random.Range(0, 2);
Go.Getgo().b = false;
Add(i);
}
}
void Add(int a)//这里只有2个装备
{
if(a==0)
{
if (jihe.CList.Contains(cloneses[0]))
{
cloneses[0].CNum++;
Write(a);
}
else
{
jihe.CList.Add(cloneses[0]);
Write(a);
}
}
if (a == 1)
{
if (jihe.CList.Contains(cloneses[0]))
{
cloneses[1].CNum++;
Write(a);
}
else
{
jihe.CList.Add(cloneses[1]);
Write(a);
}
}
} void Write(int c)
{
string path1 = Application.dataPath + "/File";
string path2 = Application.dataPath + "/File/Inventory.josn";
if (!Directory.Exists(path1))//判断这个文件夹是否存在
{
Directory.CreateDirectory(path1);//没有就创建出来
}
FileStream fs = File.Create(path2);//将数据写入
BinaryFormatter bf = new BinaryFormatter();//格式化器
string josn = JsonUtility.ToJson(cloneses[c]);//转化问json格式
bf.Serialize(fs, josn);//序列化
fs.Close();
}
void Read()
{
if (Input.GetKeyDown(KeyCode.B))
{
string path = Application.dataPath + "/File/Inventory.josn";
if (File.Exists(path))//判断有没有这个文件 有就打开
{
FileStream fs = File.Open(path, FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();//格式化器
//将文件里面的内容转化成string类型输出
string s = bf.Deserialize(fs) as string;
JsonUtility.FromJsonOverwrite(s, jihe);//重新写回到 ScriptableObject
print(s);
fs.Close();
}
}
}