【问题标题】:Which architecture for Unity4.6 UI implementationUnity4.6 UI实现的架构
【发布时间】:2015-05-13 10:16:15
【问题描述】:

我正在开发一个 Unity 项目。它是一个可视化软件,所以大部分游戏机制都是基于按钮、滑块、颜色选择器来更新我的 GamesObjects。

我不知道如何组织我的 UI 实现。 将某种 MVC 模式应用于统一是一个好主意吗?知道该怎么做吗(我找到了一些关于此的文章,但我不清楚)?

目前我正在场景中添加 UI 元素。一个名为 UIManager 的空游戏对象包含有关 UI 的脚本。这些脚本包含对 UI 元素的引用,向它们添加侦听器并包含事件调用的方法。

我的方法正确吗?如何改进?

我的 UI 管理器包含这样的脚本:

public class someMenuGUI : MonoBehaviour {

public Button enable;

public void Start()
{
    enable.onClick.AddListener(Enable);
}

public voidEnable()
{
    GameObject[] Objs = Object.FindObjectsOfType (typeof(GameObject)) as GameObject[]; 
// then do something on them
};

【问题讨论】:

    标签: c# user-interface design-patterns model-view-controller unity3d


    【解决方案1】:

    这是一个非常好的问题,没有一个可以被认为是普遍正确的答案。不过,我想分享一下我的处理方法。

    当我编写 Unity 代码时,我想到了两类用户:玩家和设计师。从本质上讲,由于几乎所有 Unity 代码都包含在 MonoBehaviours 中,并且 MonoBehaviours 在编辑器中使用,因此您一直在为设计师编写一个工具,他们用它来实际创建游戏。

    即使您没有设计人员并且独自工作,以这种方式考虑代码也是有用的。这样,代码空间和编辑器空间之间就有了清晰的分离:代码不必对编辑器中发生的事情做出任何假设;相反,设计师必须能够使用您的组件来构建他们想要的东西。

    那么,你在哪里画线?我认为如果你打算使用 MVC 模式,分离是很清楚的:控制器逻辑应该包含在代码中,但实际 UI 元素的连接应该掌握在设计师手中。最后,将我们带到代码中。

    实现 MVC 模式的一个好方法是使用事件而不是实体引用:这样控制器和视图不必知道彼此的类型,它们只需要知道模型。但是由于您希望设计器在编辑器中连接事件,因此您不能使用 C# 委托事件。值得庆幸的是,Unity 的 UI 系统为此提供了一个新功能:UnityEvent。

    因此,假设您的脚本(扮演控制器角色)必须与视图进行双向通信:从控制器到视图以更新信息,以及从视图到控制器以运行用户的操作.事实证明,设置非常简单。 Create a public UnityEvent (with a correct generic argument) for update of the data,用户操作的公共方法,代码完成!设计师所要做的就是在脚本上设置 Unity 事件以更新 UI,并设置 UI 元素的 Unity 事件以调用控制器的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2015-07-08
      • 2019-05-26
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多