Unity数据类型苦苦挣扎

时间:2018-07-07 10:16:42

标签: c# unity3d

我目前正在Unity中开发游戏,现在很难弄清楚如何管理不同的图块类型。

由于存在很多不同类型的图块(容器,提取器,研究设备等),因此我需要一种易于扩展的方式来保存,加载和访问这些数据。

我的第一个想法是使用继承:例如,所有作为容器图块的组件都来自一个名为ContainerTile的类,该类派生自TileBehaviour。如果播放器破坏了容器图块,那么播放器脚本将检查目标块上是否有任何TileBehaviour组件,然后使用destroy函数。如果他想打开一个容器,脚本将使用检查目标块上是否有任何ContainerTIle组件并使用open函数。

这样做的主要缺陷是无法以这种方式保存数据:将所有containerTile数据另存为TileBehaviour数据时,只会保存属于tileBehaviour类的数据以及所有其他数据(例如哪些项目位于容器)丢失。

有人可以告诉我该怎么办吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

正如@UnholySheep在评论中所说,您的代码似乎在请求ScriptableObject

它们类似于MonoBehaviour,但它们未附加到GameObject(因此,没有任何变换和填充)。他们可以拥有检查员,并接收一些消息,例如OnDestroy ...

继承对他们来说就像一种魅力。您还可以创建抽象派生类。此外,序列化是内置的。

例如,您定义一个名为SerializedObject的抽象Tile,然后定义其他子类ContainerTileExtractorTile ...

您可以使用自定义参数创建这些类的资产,并在组件中引用它们,就像Prefabs一样,但是它们都是同一对象。或者,您也可以在运行时实例化它们。

它们对管理人员(安全的Singleton),类固醇枚举,纯数据,通过场景/项目进行数据传输非常有用...

除了this videothis之类的Unity自有教程之外,我强烈建议您this获得有关如何使用它们的想法。