【问题标题】:Saving a list of ScriptableObject into json将 ScriptableObject 列表保存到 json
【发布时间】:2020-02-18 02:18:11
【问题描述】:

我的项目脚本

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName ="Newitems",menuName ="Inventory/Items")]
[Serializable]
public class Item : ScriptableObject
{

  new public string name = "New items";  
  //public Sprite Icon = null;      dealt with this later        
  public bool isDefaulet = false;
  ...} 

这是我的库存脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
[Serializable]
public class Inventory : MonoBehaviour
{
   [SerializeField]
public List<Item> items = new List<Item>();
 void Save()
    {
        string json = JsonUtility.ToJson(items);
        Debug.Log(json);
        File.WriteAllText(Application.dataPath + "/saveFile.json", json);
    }
    public void Load()
    {
        string json = File.ReadAllText(Application.dataPath + "/saveFile.json");
        List<Item> List = JsonUtility.FromJson<List<Item>>(json);
        Debug.Log(List);
    }
...
 }

好的,我稍后会尝试使用精灵,但是保存时控制台返回{},我现在不知道,请帮助。

【问题讨论】:

  • C# 和 UnityScript 是两种不同的语言。请不要标记不必要的语言。我已经为你删除了unityscript 标签。

标签: c# json save


【解决方案1】:

将脚本保存在 json 中的第一件事是在要在 json 中序列化的每个脚本上添加类属性 Serializable。

但是在这里我认为很难序列化 Icon 字段。在 json 中你真的可以只保存数字或字符串,并且有一个参考。

序列化 Sprite(或任何引用)的一种方法是序列化对象的名称或 id。如果你看看 unity 是如何序列化一个场景的,那就是它是如何完成的。 然后当你阅读你的 json 时,你用你的资产替换那个 id。

一些json库可以提供帮助,NewtonSoft Json.Net可以提供帮助,特别是我描述的特殊序列化供参考。

先尝试不使用 Sprite,然后添加复杂性;)

编辑

更准确地说,我认为更好的方法是不要序列化 ​​ScriptableObject,而是序列化可编写脚本的类。

class MyScriptable : ScriptableObject
{
    private MySerializableClass data;
}

[Serializable]
class MySerializableClass 
{
    private string name;
    private float data1;
    private float data2;
}

然后序列化 MySerializableClass,并使用名称或一些 id 字段将每个 scriptable 实例与良好的 MySerializableClass 链接:)

【讨论】:

  • 好的,所以我稍后会尝试使用 Sprite,但我仍然无法序列化我的列表,我已经编辑了我的问题,请检查!
  • 那有什么问题?您可以尝试不直接序列化您的 ScripatbleObject。但是只序列化你的 SO 的一个字段,这个字段可以是一个包含你所有基本数据的类
猜你喜欢
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 2020-11-28
  • 2014-09-19
  • 2018-10-22
  • 1970-01-01
相关资源
最近更新 更多