首页 > 解决方案 > Unity3D ScriptableObject 序列化

问题描述

我在保存游戏会话时遇到问题。这是保存的数据中的一些 JSON 片段。

"boughtSpells":[{"instanceID":13864},{"instanceID":13421}]

这是一些代码。

[CreateAssetMenu(fileName = "New Spell Pattern", menuName = "SpellPattern")]
[System.Serializable]
public class SpellPattern : ScriptableObject {
    public string spellName;

    [TextArea]
    public string spellDescription;
}

游戏数据模型。

[Serializable]
public class GameData
{
    public List<SpellPattern> boughtSpells;
}

我认为它保存了 Unity 的 Scriptable Object ID 的引用(它是唯一的,但不是持久的),而不是序列化其中的数据。我需要正确序列化数据,但我不知道如何使用 Unity 的 Scriptable Objects 来制作它,但同时我不想更改这些 Scriptable Objects 的架构。

标签: c#unity3dserialization

解决方案


可编写脚本的对象并不意味着在运行时进行编辑。Scriptable Objects 的目的是: -用于在编辑器会话期间保存和记录数据,例如库存系统 -用于拥有由各种系统共享的资产

为了在运行时保存数据模型,我建议您使用 Structs。

如果您需要保存游戏状态/会话,您可以使用 PlayerPrefs 并且如果您要保存的数据不是纯 int 或字符串,您应该使用 Binaryformatter 以字节文件的形式将其序列化并将其保存到内存中(Application.PersitentDatapath也许)。


推荐阅读