【发布时间】:2016-06-02 15:26:41
【问题描述】:
我在 Unity 中遇到序列化问题(使用 C#)。
我有以下类(箭头表示继承):
Vehicle(摘要)Car(摘要)Sedan
和
Vehicle(摘要)MotorBike
车辆类继承自MonoBehavior。
我有一些游戏对象(预制件),我附加了分类。我只使用非抽象类(即MotorBike 和Sedan)。
我的问题是这样的:
我想序列化存储在这些类中的数据,以便能够保存/加载。 (我为此使用BinaryFormatter。)问题是,MonoBehavior 不可序列化。
我想要的只是序列化车辆类中的数据,并(在加载数据时)将其传递给我的 Vehicle Factory 类,以使用反序列化的数据重新实例化预制件。所以,我对 MonoBehavior 部分中存储的内容并不真正感兴趣。
到目前为止我所做的尝试:
使用单独的数据类,但这会导致各种problems,我需要为我的每个车辆类创建一个子数据类。而且我需要将 Vehicle 类设为 Generic,以指示它需要使用哪个 Data 类,这将要求我在使用 Vehicle 类型的每个地方都使用 Generic Type。
另外,我尝试为 MonoBehaviour 创建一个 SerializationSurrogate,但这没有成功,因为还有许多其他类型需要代理。而且由于我对 MonoBehaviour 不感兴趣,而只对 Vehicle 类及其子类感兴趣,因此这似乎太复杂而无法尝试。
所以,我的问题是:有人知道如何处理这个问题吗?
【问题讨论】:
-
使用XmlSerializer,它不需要为类赋予serializable属性。
-
序列化在 Unity 中基本上不起作用。我会忘记它。没有你真正需要它的真实游戏场景。忘记它并继续前进。
-
程序员已经完美解释了情况。
-
您似乎属于“经验丰富的程序员,正在尝试 Unity”。从某种意义上说,你所做的是完全错误的。 Unity 中没有“汽车”这样的东西,而且永远不会有。 Unity 难以置信地不是 OO。 Unity 更像是使用 Photoshop 而不是编程。也许读这个...stackoverflow.com/a/37243035/294884
-
确实如此。在我的工作室里,非常优秀的 c++ 程序员开始在我的团队中作为 Unity3D 开发人员工作——我只能说,即使他的代码在某种程度上很好(你会看到他良好的编程技能),但完全不是“Unity3D”的编码方式。到处使用接口、部分类定义等,使 unity3d 项目代码非常晦涩。
标签: c# oop serialization unity3d