序列化和反序列化 Unity3D MonoBehaviour 脚本

Che*_*rno 5 serialization unity-game-engine

背景:从 Monobehaviour 继承的类无法序列化。

前提:一种保存 MonoBehaviour 脚本的数据(变量/字段及其值)的方法,以便可以将其序列化,并再次反序列化并使用此数据“填充”相应的 MonoBehaviour 脚本的变量/字段值。

到目前为止尝试过:

  1. 拥有一个可序列化的“包装器/容器”类,该类具有与 MB 脚本相同的字段,但不从 MB 继承。工作得很好,但每个 MV 脚本都需要它自己的包装类和它自己的包装函数。
  2. 序列化 aList<FieldInfo>并用 MB 的字段填充它...有效 30%;
    • FieldInfos添加但类型错误,并且
    • 反序列化时无法访问它们的值,因为需要类的实例,但只有一个列表可用

我觉得这不会那么难,但我的反思技能和相关技能是有限的,但鉴于保存/加载是一个相当常见的功能,我希望有人做到了,或者有人可以为我指明正确的方向。

cod*_*res 1

使用 .NET 中内置的 BinaryFormatter 序列化 MonoBehaviour 没有简单的方法。您可以考虑以下几种选择:

  1. 使用纪念品模式。这(或多或少)就是您尝试使用包装器实现的目标。Momento 假设保存和恢复对象的内部状态,因此序列化是其中一种技术。
  2. 使用 Unity 序列化,通过声明方法:

    无效序列化(){}

    无效反序列化(){}

    在您的 MonoBehaviour 脚本中,您将在方法中选择要序列化/反序列化的属性/字段。

  3. 有一个有趣的框架,源代码在GitHub上。它有一个自定义序列化框架,可以让您序列化几乎所有内容(不仅仅是单一行为)。我没用过,这里是Unity3d论坛的论坛页面,相信值得一看。