c# - 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 的架构。
解决方案
可编写脚本的对象并不意味着在运行时进行编辑。Scriptable Objects 的目的是: -用于在编辑器会话期间保存和记录数据,例如库存系统 -用于拥有由各种系统共享的资产
为了在运行时保存数据模型,我建议您使用 Structs。
如果您需要保存游戏状态/会话,您可以使用 PlayerPrefs 并且如果您要保存的数据不是纯 int 或字符串,您应该使用 Binaryformatter 以字节文件的形式将其序列化并将其保存到内存中(Application.PersitentDatapath也许)。
推荐阅读
- javascript - 如何在不粘到另一个单元格的情况下填充表格单元格
- vue.js - 如何插入 nuxt-link 的 `to` 道具?
- visual-studio-code - 安装 julia 和 vscode 时。收到错误“无法启动 julia 语言服务器。”
- java - 这两个代码片段有何不同?
- javascript - 有没有办法在地理服务器中使用时间滑块提供 XYZ 格式的图块?
- java - 错误:使用 Eclipse 运行 COMSOL 模型时出现 NoClassDefFoundError
- c# - 动态 EF Linq 使用反射、成员表达式或任何东西加入导航属性
- vba - 如何在 VBA 中设置依赖于相邻单元格值的下拉列表?
- amazon-web-services - 如何在 AWS dynamodb 中存储和检索一对多关系数据
- c# - 从同一 AppDomain 中的不同程序集访问实例化对象