【问题标题】:Unity MonoBehaviour Objects vs Game LogicUnity MonoBehaviour 对象与游戏逻辑
【发布时间】:2016-02-05 12:48:36
【问题描述】:

我最初在昨天的 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;

通过这种方式,我将附加到游戏对象的实际脚本仍然可以访问所有剑法和数据成员,但我的类可以随时随地实例化。

我目前正在与恶魔斗争如何解决这个问题,我想我会看看是否有经验丰富的具有 Game Logic 和 Unity 的程序员可以帮助我提供一些最佳实践。我是一名业务逻辑程序员,每天只处理会计问题、API、移动开发和网页设计,所以游戏逻辑对我来说是全新的。提前感谢您的帮助、见解、建议和反馈!

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    我感到困惑的问题无处不在,它指出您不应该在您的类中使用派生自 MonoBehaviour 的构造函数。

    Unity 期望充当所有从 UnityEngine.Object 继承的对象的工厂,其中将包括所有游戏对象、组件、行为脚本等。

    在许多情况下,您与之交互的 .NET 对象更像是引擎实际使用的底层 C++ 对象的垫片。直接调用这些构造函数之一将创建一个从其 C++ 内部孤立的 .NET 对象。

    所有这些都隐藏在视图之外,以便初学者更容易使用 Unity。他们没有说“嘿,使用这个工厂模式来构建组件”,而是告诉你打电话给AddComponent。只要您让 Unity 处理这些对象的初始化,所有这些(大部分)都是透明且无缝的。

    所以,听起来您正在考虑创建一些POCO 类来存储配置数据。没关系——我一直都这样做。只需确保将类与 Unity 原生类分开即可。

    【讨论】:

    • 听起来不错。我看了你的作品集,很不错。感谢您的帮助和理解!
    猜你喜欢
    • 2017-08-15
    • 2017-12-13
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多