【问题标题】:How do I serialize ScriptableObjects?如何序列化 ScriptableObjects?
【发布时间】:2018-09-18 02:10:52
【问题描述】:

我正在使用一个我不完全理解但运行良好的保存系统。它保存了可序列化的代码,但我开始使用 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 未标记为可序列化。

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

【问题讨论】:

  • 要持久存储简单数据,您可以查看PlayerPrefs。对于更复杂的数据,我建议使用 JSONXML
  • 但是为什么你需要这样做。 ScriptableObject 已经是一种统一的序列化格式。

标签: unity3d


【解决方案1】:

序列化为 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

【讨论】:

    【解决方案2】:

    据我所知,你做不到,有可能做一个自定义检查器、编辑器、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();
    }
    

    【讨论】:

    • 自定义编辑器对于在构建中持久保存数据没有多大帮助...
    • 你不能因为SerializableObjects被视为带有Asset Packages的文件,这意味着你不能SerializeScribtableObject,如果你想存储和保存您应该使用Asset packages 导出和导入云或服务器。要保存可序列化的东西,只需使用普通类。我推荐使用洛桑白提供的解决方案。您保存 Serializable 类并加载 ScriptableObjects
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多