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文章来源:https://www.toymoban.com/news/detail-772659.html
表格转json或其他类型https://tableconvert.com/zh-cn/excel-to-json文章来源地址https://www.toymoban.com/news/detail-772659.html
到了这里,关于unity中ScriptableObject的保存技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!