[英]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.