Unity ScriptableObject持久化操作

本文仅作笔记学习和分享,不用做任何商业用途

本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正

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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值