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

Unity 5.6 and creating objects with C# classes

我一直在尝试 Unity,到目前为止,我花了很多时间来制作一个具有统计数据和专长的角色 class,就像在龙与地下城中一样,到目前为止它们都运行良好,但是现在我想为这样的角色制作装备。

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

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

是否应该创建一个具有特定属性的 class 更好,例如一个名为 Iron sword 的 class,它从武器和物品继承到游戏对象,或者我应该只制作一个 class 名为 weapon 的武器,它包含列表或数组中的所有值和名称? 然后......我如何实例化我的脚本而不需要在游戏中创建一个对象删除后它也会从场景中删除脚本吗?

抱歉提供了这么多信息,但我对使用 Unity 可以做和不能做的所有事情感到有点不知所措。

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

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

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

如果您确实愿意,可以从这里使用 "normal" C# classes 构建您的整个游戏。它们都从这一次 MonoBehaviour 开始,但除此之外,您可以编写所有内容 "top down"。例如:Instantiate a Game class,然后加载一个文本文件并实例化 GameObjects,组装它们的所有组件,直到视觉表示完成。但是,这样您就不会使用 Unity 提供的所有功能。

Unity 的方法是从组件构建单个游戏对象,这些组件大多彼此独立运行。人类玩家头像可能包含 PlayerInput、Renderer、WeaponBehaviour、HealthComponent 等。

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

也许你意识到,所有的武器都会做类似的事情。然后你可以在你的玩家游戏对象上有一个 WeaponBehaviour ,它像 hub/controller 一样工作。然后它引用了一个包含统计数据的数据文件,以及对模型、材料、声音等的引用。