我最初是在昨天的Unity答案论坛上发布的,但到目前为止还没有得到任何答复。所以我想我会在这里试试运气。
所以我对Unity来说有些不高兴。我从Unity 3开始涉足它,但从未真正做过任何有建设性或值得一提的事情。在获得计算机科学学位后,我已经成为C#,ASP.NET和JAVA程序员,已有5年多的职业生涯。所以我想抛弃那些我理解OOP的东西。所以在这里打击了我的真相。
我的问题是,在创建类的层次结构时,我想知道标准实践,以及它们应该如何扩展或与MonoBehaviour类绑定。
以下是我在层次结构中的特殊情况:
IPickupable (interface) > Item : Monobehaviour, IPickupable > Weapon : Item, IEquipable (interface) > Sword : Weapon
这就是我现在所拥有的。我将MonoBehaviour放在我的类结构的最底层,这样当我创建一个新的Sword()对象时,我必须使用Start()。
我感到困惑的问题,无论我看到的是什么,都声明你不应该在你的MonoBehaviour派生的类中使用构造函数。好吧,当我从我的数据库创建项目字典时,我想创建一堆例如剑的实例,并将它们存储在一个集合中。这一切都发生在代码中,实际上没有任何东西在屏幕上呈现或在游戏中发生。
构建我的类结构以使所有游戏逻辑都包含在普通类中会更有益 - 然后有一个使用我最顶层逻辑类的顶级类。例如,我上面的示例将更改为:
SwordObject : Monobehaviour
private Sword sword;
通过这种方式,我附加到GameObject的实际脚本仍然可以访问所有的剑方法和数据成员,但我的类可以随时随地实例化。
我目前正在与恶魔争论如何解决这个问题,并且我认为如果有经验丰富的Game Logic和Unity程序员可以帮助我解决一些最佳实践问题。我是一名商业逻辑程序员,每天只处理会计问题,API,移动开发和网页设计,所以游戏逻辑对我来说都是新手。感谢您的帮助,见解,建议和反馈!
答案 0 :(得分:2)
我感到困惑的问题,无论我看到的是什么,都说你不应该在你的MonoBehaviour派生的类中使用构造函数。
Unity希望充当从UnityEngine.Object
继承的所有对象的工厂,其中包括所有游戏对象,组件,行为脚本等。
在许多情况下,与之交互的.NET对象更多地是引擎实际使用的底层C ++对象的垫片。直接调用其中一个构造函数将创建一个从其C ++内部构件中孤立的.NET对象。
所有这些都隐藏在视图之外,因此初学者可以更容易地访问Unity。他们没有说“嘿,使用这种工厂模式来构建组件”,而是告诉你打电话给AddComponent
。只要你让Unity处理这些对象的初始化,所有这些(大部分)都是透明和无缝的。
因此,听起来您正在考虑创建一些POCO类来存储配置数据。那很好 - 我一直这样做。只需确保您的类与Unity本机之间保持分离。