簡體   English   中英

將 ScriptableObject 列表保存到 json 中

[英]Saving a list of ScriptableObject into json

我的項目腳本

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

好的,我稍后會嘗試使用精靈,但是保存時,控制台返回 {},我現在不知道,請幫助。

將腳本保存在 json 中的第一件事是在要在 json 中序列化的每個腳本上添加類屬性 Serializable。

但在這里我認為序列化 Icon 字段會很困難。 在 json 中,您確實只能保存數字或字符串,並且有參考。

序列化 Sprite(或任何引用)的一種方法是序列化對象的名稱或 id。 如果您查看統一序列化場景的方式,那么它就是如何完成的。 然后當你閱讀你的 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 字段將每個腳本實例與好的 MySerializableClass 鏈接:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM