如何序列化ScriptableObjects?

时间:2018-09-18 02:10:53

标签: unity3d

我使用的是我不太了解的保存系统,但是效果很好。它保存了可序列化的代码,但是我开始使用ScriptableObjects作为保存清单的一种方式,但是它坏了,我现在不知道该如何解决。

这是我正在使用的代码:

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

我尝试使用[System.Serializable] 但是我得到了这个错误:

  

SerializationException:在程序集中输入UnityEngine.ScriptableObject   UnityEngine.CoreModule,版本= 0.0.0.0,文化=中性,   PublicKeyToken = null未标记为可序列化。

我需要更改保存游戏的方式还是有解决此问题的方法?

2 个答案:

答案 0 :(得分:2)

序列化为JSON?您可以使用JsonUtility做到这一点。

keypad(3x)

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

答案 1 :(得分:1)

据我所知,您不可能做一个自定义检查器,编辑器,gui,但这非常棘手,我什至都不知道该怎么做。但也许您可以做到这一点。

[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();
}