Unity 5.6和使用C#类创建对象

时间:2017-06-05 18:15:12

标签: c# unity3d game-engine development-environment

我一直在尝试使用Unity,到目前为止,我已经花了很多时间编写一个带有统计数据和专长的角色类,就像“龙与地下城”一样,到目前为止它们都运行良好,但现在它来到了我身边为这种角色创造装备的愿望。

我已经看到你可以从预制部分创建对象,然后添加脚本片段来改变它们的行为甚至它们的外观,但是当我习惯于从头开始修改已经存在的类时,它感觉很奇怪我几乎不知道它是如何运作的。

因此,我可以简单地进入脚本文件夹并创建一个新的C#脚本,其中包含将要使用的所有值,例如,所有装甲都有一个装甲类和重量,因此我可以创建一个通用类具有名为Item的对象的所有属性然后将其属性继承到ArmorWeaponsConsumables,并且每个属性都可以进一步专门化为更具体的对象,现在真正的问题来了:

创建一个包含特定属性的类是否应该更好,例如一个名为Iron sword的类,它继承自武器,从item继承到gameobject,或者我应该只创建一个名为weapon的类来保存所有属性列表或数组中的值和名称?然后......如何在不需要在游戏中创建一个对象的情况下实例化我的脚本,当删除它时也会从场景中删除脚本?

很抱歉这么多信息,但是我对你可以做的所有事情都感到有点不知所措,而且不能用Unity做。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

Unity的方式是从组件构建单独的GameObjects,这些组件大多彼此独立运行。人类玩家头像可能包括PlayerInput,Renderer,WeaponBehaviour,HealthComponent等。

没有人能告诉你什么设计最适合你的游戏,但两个方向都是可能的。对于初学者,我建议创建一个抽象的Weapon基类MonoBehaviour,然后为每个类型创建一个子类并将其放在GameObject上。这可以做一些事情,比如访问其他组件,接收对撞机触发器消息和存储数据。

也许你意识到,所有武器都做类似的事情。然后你可以拥有一个WeaponBehaviour,它就像你的玩家GameObject上的一个集线器/控制器。然后它引用了一个包含统计数据的数据文件,以及对模型,材料,声音等的引用。