unity3d 如何序列化ScriptableObjects?

x3naxklr  于 2023-01-05  发布在  其他
关注(0)|答案(3)|浏览(156)

我使用了一个保存系统,我不完全理解,但运行良好。它保存可序列化代码,但我开始使用ScriptableObjects作为保存库存的一种方式,它坏了,我不知道现在如何修复它。
这是我正在使用的代码:

[CreateAssetMenu(fileName = "Attack")]
 public class PlayerAttckCard : ScriptableObject
{
    public string AtackName,bookName;
    public bool multiTarget;
    public float Bacepower;
    public GameObject miniGame;
}

我尝试使用[System.Serializable],但我得到这个错误:
序列化异常:程序集UnityEngine. CoreModule(版本= 0.0.0.0,区域性=中性,PublicKeyToken = null)中的类型UnityEngine. ScriptableObject未标记为可序列化。
我是否需要更改保存游戏的方式,或者是否有解决此问题的方法?

ilmyapht

ilmyapht1#

序列化到JSON?您可以使用JsonUtility完成此操作。
https://docs.unity3d.com/Manual/JSONSerialization.html

public class TestObject : ScriptableObject
{
    public string foo, bar;
}

var obj = ScriptableObject.CreateInstance<TestObject>();
obj.foo = "hello";
obj.bar = "world";
var json = JsonUtility.ToJson(obj);
Debug.Log(json); // {"foo":"hello","bar":"world"}

obj.foo = "something";
obj.bar = "else";
JsonUtility.FromJsonOverwrite(json, obj);
Debug.Log(obj.foo + ", " + obj.bar); // hello, world
sauutmhj

sauutmhj2#

据我所知,你不能,这是可能的,做一个自定义检查器,编辑器,图形用户界面,但它是相当棘手的,我不知道如何做到这一点,甚至。但也许,你可以做到这一点。

[System.serializable]
public class PlayerAttackCard
{
   public string AtackName,bookName;
   public bool multiTarget;
   public float Bacepower;
   public GameObject miniGame;
}

和可编写脚本的对象。

public class PlayerAttackCardData : ScriptableObject
{
    public PlayerAttackCard playerAttackCard = new PlayerAttackCard();
}
pdsfdshx

pdsfdshx3#

你应该能够使用它,你可以把它们放在一起或分开,我得到没有错误

[CreateAssetMenu(fileName = "item.asset",menuName = "inventory/item")][ System.Serializable]
public class Item:ScriptableObject

[CreateAssetMenu(fileName = "item.asset",menuName = "inventory/item"), System.Serializable]
public class Item:ScriptableObject

相关问题