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

时间:2014-07-09 04:05:45

标签: unity3d unityscript

我只是想问一下在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 Views一样可重用。此外,如果有任何其他库或脚本我可以用来实现这一点,以便我不为此重新发明轮子?

在旁注上我也搜索了NGUI,虽然我不确定这是否符合我的需要。因为当我尝试创建UILabel时,组件只有很少的选项,我不确定如何使用它。

2 个答案:

答案 0 :(得分:0)

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

这取决于。您的实施很简单但有效。如果您需要更多精美的UI,可以考虑:

根据Unity official blog,新的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 ();     

有趣的链接:

答案 1 :(得分:0)

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

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

这些是我使用的两个UI系统,并且已经找到了两者的用途。