unity中ScriptableObject的保存技巧

        so(ScriptableObject 这里是简称,后面都用so代替ScriptableObject)在处理大量数据,属实不怎么样,本人深有体会,在项目中一开始定的是用so存储数据,到后期数据量变大了,so的维护就变的特别麻烦,因为so用代码赋值后会暂时保存,在unity的属性面板上可以看到我们修改后的内容,但是当我们重启unity后会发现so中的数据又恢复到原来的数据了,也就是说没有保存在本地,面对这种办法,我们可以用json读取后存到so中,话不多说,开始贴代码

[CreateAssetMenu(fileName = "Options", menuName = "创建题目so")]
public class data : ScriptableObject
{
    [NonReorderable]
    public List<QuestionBank> questionBanks;

    List<dates> dates;
    [ContextMenu("运行")]
    private async Task aw()
    {
        Debug.Log("测试有没有值:" + questionBanks[0].TitleStr);
        string path = Application.streamingAssetsPath + "/题库.json";
        Debug.Log(path);
        var uri = new System.Uri(Path.Combine(path));
        string url = uri.ToString();
        UnityWebRequest www = UnityWebRequest.Get(uri);
        await www.SendWebRequest();
        try
        {
            if (www.isNetworkError || www.isHttpError)
            {
                Debug.LogError(www.error);
            }
            else
            {
                Debug.Log(www.downloadHandler.text);
                string jsonStr = www.downloadHandler.text;
                Debug.Log(jsonStr);
                List<dates> da = JsonConvert.DeserializeObject<List<dates>>(jsonStr);
                Debug.Log(da[0].id);
                dates = da;
            }
        }
        catch (System.Exception ex)
        {
            Debug.LogError($"有报错!{ex.Message}");
            throw;
        }
        for (int i = 0; i < dates.Count; i++)
        {
            questionBanks[i].TitleStr = dates[i].topic;
            questionBanks[i].id = int.Parse(dates[i].id);
            questionBanks[i].OptionStr1 = dates[i].optionA;
            questionBanks[i].OptionStr2 = dates[i].optionB;
            questionBanks[i].OptionStr3 = dates[i].optionC;
            questionBanks[i].OptionStr4 = dates[i].optionD;
            questionBanks[i].CorrectOptions = dates[i].correctoption;
        }
    }
}

我们是在创建so的类里写方法,读取json存入so,存入后要按ctrl+s保存才有效,写完这个后回到unity的属性面板,找到创建好的so,在空白处单击右键

 然后点击运行,就可以执行读取json并赋值给so的操作了,用这种方法保存的在重启后数据也还在,也就是说是写入asset了(小声bb,json赋值so的操作本人跟主程交流了一番,主程给的这个方法,特好用,主程万岁!!!)

如果不知道so怎么创建的,可以去看我之前写的文章

so的创建https://blog.csdn.net/k253316/article/details/128233834?spm=1001.2014.3001.5502

 表格转json或其他类型icon-default.png?t=N2N8https://tableconvert.com/zh-cn/excel-to-json

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

故渊9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值