2017-06-05 111 views
0

我一直在尝试Unity,到目前为止,我已经花了很多时间来制作一个类似于地下城和龙的属性和专长的角色类,到目前为止他们都工作好吧,但现在我想要为这种角色创造装备。Unity 5.6和用C#类创建对象

我见过你可以从预制部分创建对象,然后添加脚本片段来改变他们的行为,甚至他们的外观,但是当我习惯从头开始创建类来改变已经我几乎没有任何关于它如何工作的知识。因此,我可以简单地进入脚本文件夹并创建一个新的C#脚本,其中包含所有常用的值,例如,所有护甲都有护甲类和重量,因此我可以制作一个通用的有所谓Item对象的所有属性类,然后继承它的属性ArmorWeaponsConsumables,和他们每个人还可以再专门为更具体的对象,现在真正的问题来了:

它应该是更好地创建一个拥有特定属性的类,例如一个叫做铁剑的类,它从武器和物品继承到gameobject,或者我应该继续一个名为武器的类,其中包含列表或数组中的所有值和名称?然后......如何在不需要在游戏中创建一个对象的情况下实例化我的脚本,当删除它时,它也从场景中删除脚本?

对不起,有这么多的信息,但我只是有点不知所措,你可以做和不能用Unity做的事情。

回答

1

Unity旨在与组件体系结构一起使用,而不是面向对象的设计。这意味着,大多数情况下,您将在场景中创建GameObjects,然后为其添加脚本,添加行为或数据。

也可以将数据存储在项目的ScriptableObject实例中,或存储在任何其他资产(如文本文件或纹理)中。

由于在Unity中没有主要函数或任何特定的程序启动,您必须在第一个场景中选择一个根管理器GameObject,该管理器有一个MonoBehaviour脚本和一个Unity回调函数,例如醒来或开始)。现在这个脚本可以像你的常规应用程序中的主要功能一样工作。

如果你真的想,你可以用“普通”的C#类从这里构建你的整个游戏。他们都是从MonoBehaviour开始的,但除此之外,你可以写下所有的“自上而下”。例如:实例化一个Game类,然后加载一个文本文件并实例化GameObjects,组装它们的所有组件,直到视觉表示完成。但是,这样你就不会使用Unity提供的所有功能。

Unity的方式是从组件中构建单独的GameObjects,这些组件主要独立于另一个组件运行。人类玩家的头像可能由玩家输入,渲染器,WeaponBehaviour,HealthComponent等组成。

没有人可以告诉你什么设计最适合你的游戏,但两个方向都是可能的。对于初学者,我建议创建一个抽象武器基类MonoBehaviour,然后为每种类型创建一个子类并将其放在一个GameObject上。这可以执行诸如访问其他组件,接收对撞机触发消息和存储数据等内容。也许你意识到,所有的武器都会做类似的事情。然后你就可以拥有一个WeaponBehaviour,它就像你的玩家GameObject上的hub/controller一样工作。然后引用包含统计信息的数据文件,以及对模型,材料,声音等的引用。

+0

*不*遵循Unity的“预期”模式会导致性能改进,因为调用时有很大的开销'更新()'成千上万的MonoBehaviour脚本。拥有一个调用类似方法的中央“主”脚本效果会更好。事实上,有些游戏根本没有其他的MonoBehaviour脚本!我倾向于使用一对夫妇,所以我可以以一种简单的方式从一个GameObject引用到一个System.Object引用(某些类型T)。但是相同的数据也可以存储在字典中。 – Draco18s