Unity 添加显示视图的正确方法

问题描述 投票:0回答:2

我只是想问在 Unity 上创建和显示视图的正确方法是什么。我只是这方面的初学者,最近刚刚观看了有关如何编写脚本的教程,并了解了如何动态创建 GUI,其中包括按钮、编辑文本框和其他视图,但不确定我应该如何真正以优化的方式实现它并且不会影响应用程序的性能。到目前为止,我尝试的是创建一个 editText,其中我将其设置在 MainCamera 上进行显示,我的目标是可重用,这样,如果我需要在应用程序上添加更多 editText,我只需拖放脚本即可。这是到目前为止的代码:

using UnityEngine;
using System.Collections;

public class EditText : MonoBehaviour {

    public int width = 150;
    public int height = 25;
    public int x_position = 0;
    public int y_position = 0;
    public string text = "Hello World";
    public Position position = Position.unset;
    public int text_size = 15;

    public enum Position{unset,center_screen, center_vertical, center_horizontal};

    void OnGUI () {
        setPosition ();

        GUI.skin.textArea.fontSize = text_size;
        GUI.color = Color.red;
    }

    private void setPosition(){
        switch (position) {
        case Position.center_screen:
            GUI.TextArea (new Rect (Screen.width/2 - width/2, Screen.height/2 - height/2, width, height), text);
            GUI.backgroundColor = Color.white;
            break;
        case Position.center_vertical:
            GUI.TextArea (new Rect (x_position, Screen.height/2 - height/2, width, height), text);
            GUI.backgroundColor = Color.white;
            break;
        case Position.center_horizontal:
            GUI.TextArea (new Rect (Screen.width/2 - width/2, y_position, width, height), text);
            GUI.backgroundColor = Color.white;
            break;
        default:
            GUI.TextArea (new Rect (x_position, y_position, width, height), text);
            GUI.backgroundColor = Color.white;
            break;
        }
    }


}

问题是我这样做对吗还是应该停止并使用其他实现?因为我真的想让它像 Android 视图一样可重用。另外,如果我可以使用任何其他库或脚本来实现此目的,这样我就不会为此重新发明轮子?

顺便说一句,我还搜索了 NGUI,尽管我不确定这是否适合我的需求。因为当我尝试创建 UILabel 时,该组件只有几个选项,我不太确定应该如何使用它。

c# unity-game-engine
2个回答
0
投票

问题:我这样做对吗还是应该停止并使用其他实现?

这要看情况。您的实现很简单但有效。如果您需要更精美的 UI,您可以考虑:

根据Unity官方博客,“新的GUI系统已经非常接近了,它将包含在Unity 4.6中,这也将是Unity 4周期中的最后一个重大更新”。

我更喜欢最后一个,Unity 4.6或Unity 5,因为它是免费的并且来自Unity官方,支持和社区对你来说是一笔巨大的财富!

对于您当前的实现,我认为您可以使其变得更好,而无需使用:

GUI.TextArea (new Rect (...)); // Not the best way

尝试使用:

GUILayout.BeginHorizontal ();
{
    GUILayout.FlexibleSpace ();

    //label etc., this guarantees centered in your UI and resolution independent.
    GUILayout.XXX (...);  

    GUILayout.FlexibleSpace ();
}
GUILayout.EndHorizontal ();     

有趣的链接:


0
投票

Unity 的 GUI 系统远非完美,但正在逐步改进。对于具有少量简单元素的界面来说,这是一个很好的解决方案。当使用 Unity 的 GUI 系统时,我通常会单独设置每个菜单或“显示”。我从未在 Unity 系统中以模块化方式设计 UI 元素。我还没有遇到过设置元素的“矩形”不能满足我的操作需求的情况。除了我从未注意到它的影响之外,我无法对 Unity GUI 系统的性能说太多。

NGUI 与 Unity 一样被设计为模块化。要创建您想要的 ui 元素,可能需要您将各种脚本拼凑在一起。例如,输入字段需要 UILabel、UIInput 脚本和 BoxCollider。使用 NGUI 中包含的所有脚本,我已经能够创建一些非常令人印象深刻的界面预制件。能够在场景视图中直观地构建我的界面也很有帮助。

这是我使用过的两个 UI 系统,并且发现两者都有用处。

© www.soinside.com 2019 - 2024. All rights reserved.