unity中ScriptableObject的保存技巧

这篇具有很好参考价值的文章主要介绍了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,在空白处单击右键unity scriptableobject 代码修改后保存,Unity,unity,游戏引擎

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

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

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

 表格转json或其他类型https://tableconvert.com/zh-cn/excel-to-json文章来源地址https://www.toymoban.com/news/detail-772659.html

到了这里,关于unity中ScriptableObject的保存技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包