我目前正在Unity中开发游戏,现在很难弄清楚如何管理不同的图块类型。
由于存在很多不同类型的图块(容器,提取器,研究设备等),因此我需要一种易于扩展的方式来保存,加载和访问这些数据。
我的第一个想法是使用继承:例如,所有作为容器图块的组件都来自一个名为ContainerTile的类,该类派生自TileBehaviour。如果播放器破坏了容器图块,那么播放器脚本将检查目标块上是否有任何TileBehaviour组件,然后使用destroy函数。如果他想打开一个容器,脚本将使用检查目标块上是否有任何ContainerTIle组件并使用open函数。
这样做的主要缺陷是无法以这种方式保存数据:将所有containerTile数据另存为TileBehaviour数据时,只会保存属于tileBehaviour类的数据以及所有其他数据(例如哪些项目位于容器)丢失。
有人可以告诉我该怎么办吗?
谢谢。
答案 0 :(得分:1)
正如@UnholySheep在评论中所说,您的代码似乎在请求ScriptableObject
。
它们类似于MonoBehaviour
,但它们未附加到GameObject(因此,没有任何变换和填充)。他们可以拥有检查员,并接收一些消息,例如OnDestroy ...
继承对他们来说就像一种魅力。您还可以创建抽象派生类。此外,序列化是内置的。
例如,您定义一个名为SerializedObject
的抽象Tile
,然后定义其他子类ContainerTile
,ExtractorTile
...
您可以使用自定义参数创建这些类的资产,并在组件中引用它们,就像Prefabs一样,但是它们都是同一对象。或者,您也可以在运行时实例化它们。
它们对管理人员(安全的Singleton),类固醇枚举,纯数据,通过场景/项目进行数据传输非常有用...
除了this video和this之类的Unity自有教程之外,我强烈建议您this获得有关如何使用它们的想法。