U4S2L4——ScriptableObject 让其真正意义上的持久化

对于ScriptableObject的数据,由于它在游戏发布运行过程中无法被持久化
我们可以利用PlayerPrefs、XML、Json、2进制等等方式
让其可以达到被真正持久化的目的

但是并不是很建议大家利用ScriptableObject来做数据持久化,有点画蛇添足的意思了

本章代码关键字

1
JsonUtility.FromJsonOverwrite()    //传入json字符串和要读取数据的对象,json字符串反序列化的内容会直接覆盖掉传入的对象的数据

前置知识

回顾通过ScriptableObject创建非持久化数据

Json数据持久化

回顾数据持久化

硬盘<=>内存
使用数据时从硬盘中读取,数据改变后保存到硬盘上
游戏退出程序关闭后,数据信息会被存储到硬盘上,达到持久化的目的

我们之前学习过的数据持久化相关知识

  • PlayerPrefs
  • XML
  • Json
  • 2进制

ScriptableObject并不适合用来做数据持久化功能
但是我们可以利用我们学过的数据持久化方案让其持久化

利用Json结合ScriptableObject存储数据

1
2
3
4
5
6
7
8
9
10
11
MyData data = ScriptableObject.CreateInstance<MyData>();
data.PrintInfo();
data.i = 9999;
data.f = 6.6f;
data.b = true;
//把数据对象序列化为json字符串
string jsonStr = JsonUtility.ToJson(data);
print(jsonStr);
//把数据序列化后的结果 存入到指定路径当中
File.WriteAllText(Application.persistentDataPath + "/testJson.json", jsonStr);
print(Application.persistentDataPath);

利用Json结合ScriptableObject读取数据

传入读取到的json字符串和要接收数据的对象,该对象内的数据将会被json字符串反序列化的数据覆盖

1
2
3
4
5
6
MyData data = ScriptableObject.CreateInstance<MyData>();
data.PrintInfo();
string str = File.ReadAllText(Application.persistentDataPath + "/testJson.json");
//根据json字符串反序列化出数据 将内容覆盖到数据对象中
JsonUtility.FromJsonOverwrite(str, data);
data.PrintInfo();