统一数据类型存在困难



我目前正在开发一款 Unity 游戏,在弄清楚如何管理不同的磁贴类型时遇到了困难。

由于有很多不同种类的磁贴(容器、提取器、研究设备等(,我需要一种方法来保存、加载和访问这些数据,并且易于扩展。

我的第一个想法是使用继承:例如,作为容器磁贴的所有组件都派生自一个名为 ContainerTile 的类,该类派生自 TileBehavior。如果玩家销毁容器图块,则播放器脚本将检查目标块上是否有任何 TileBehavior 组件,然后使用销毁函数。如果他想打开一个容器,脚本将使用检查目标块上是否有任何 ContainerTIle 组件并使用 open 函数。

这样做的主要缺陷是保存数据不能以这种方式工作:将所有容器图块数据另存为 TileBehavior 数据时,它只保存属于 tileBehavior 类的数据,所有其他数据(如容器中的哪些项(都将丢失。

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

谢谢。

正如@UnholySheep在评论中所说,看起来您的代码正在乞求ScriptableObject.

它们就像MonoBehaviour,但它们不附加到游戏对象(所以,没有变换和其他东西(。他们可以有检查员并接收一些消息,例如 OnDestroy...

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

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

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

它们适用于经理(安全的单例(、类固醇枚举、纯数据、通过场景/项目传输数据......

我强烈推荐您此视频以获取有关如何使用它们的想法,当然还有Unity自己关于此事的教程,例如这个和这个

相关内容

最新更新