首页 > 解决方案 > Unity 数据类型之争

问题描述

我目前正在 Unity 中开发一款游戏,我很难弄清楚如何管理不同的瓷砖类型。

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

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

这样做的主要缺陷是保存数据不能以这种方式工作:当将所有 containerTile 数据保存为 TileBehaviour 数据时,它只保存属于 tileBehaviour 类的数据以及所有其他数据(例如容器中的哪些项目)丢失了。

有人能告诉我我该怎么做吗?

谢谢。

标签: c#unity3d

解决方案


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

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

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

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

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

它们适用于管理人员(安全单例)、类固醇枚举、普通数据、通过场景/项目传输数据......

我强烈推荐这个视频来了解如何使用它们,当然还有 Unity 自己的教程,比如这个这个


推荐阅读