本文仅作笔记学习和分享,不用做任何商业用途
Unity (编辑器)数据持久化 之 ScriptableObject初识与创建-CSDN博客
通过上一篇文章的学习可以知:[CreateAssetMenu(fileName ="文件名" ,menuName ="菜单名",order =0)]这个特性可以基于脚本创建一个表,然后自己提前填写,也就是静态数据
但是如果我想要使用代码实时控制表格中的内容,从而动态配表呢?就可以用到CreateInstance这个方法
1.CreateInstance方法的非持久化特点
首先,我有一个继承ScriptableObject的脚本,里面有三个变量和一个打印方法
[CreateAssetMenu(fileName ="文件名" ,menuName ="菜单名",order =0)]
public class LearnScripttableObject : ScriptableObject
{
public int a;
public string b;
[SerializeField]
private GameObject c;
public void printinfo()
{
Debug.Log(a);
Debug.Log(b);
Debug.Log(c);
}
}
CreateInstance这个静态方法(其作用为创建一个 LearnScripttableObject
类型的实例)
dates = ScriptableObject.CreateInstance<LearnScripttableObject>();
修改演示:
private void Awake()
{
dates = ScriptableObject.CreateInstance<LearnScripttableObject>();
dates.a = 10;
dates.b = "任意字符串";
dates.printinfo();
}
这并不适合我们保存数据的目的,但是因其可以写作代码,所以配合数据持久化知识点更加方便
2.转JSON存取
Unity数据持久化 之 Json序列化与反序列化_unity json 反序列化-CSDN博客
Unity数据持久化 之 LitJson序列化与反序列化_unity litjson-CSDN博客
这里以Utility作演示
存
public class ScritableObjectPersistence :MonoBehaviour
{
LearnScripttableObject dates;
private void Awake()
{
dates = ScriptableObject.CreateInstance<LearnScripttableObject>();
dates.a = 10;
dates.b = "任意字符串";
dates.printinfo();
string str =JsonUtility.ToJson(dates);
File.WriteAllText(Application.persistentDataPath+"text.json",str);
print(Application.persistentDataPath);
}
}
取(override原有的数据)
string newstr = File.ReadAllText(Application.persistentDataPath + "text.json");
JsonUtility.FromJsonOverwrite(newstr, dates);