Unity IMGUI

来源:互联网 发布:购物软件排行2016 编辑:程序博客网 时间:2024/05/18 13:06

1.基础

创建每种控件的方法都是雷同的。第一个参数rect,表示位置;后面的参数表示控件的内容,可以包含字符串和图片,tooltips,可以单独用其中一个, 也可以使用GUIContent,使用多个。还有一个guistyle。

2.控件类型

Label

Button,抬起时返回true;RepeatButton,按住时一直返回true。通过if来判断

    void OnGUI () {        if (GUI.RepeatButton (new Rect (25, 25, 100, 30), "RepeatButton")) {            // This code is executed every frame that the RepeatButton remains clicked        }    }

TextField,可编辑。返回值为我们在文本框中编辑的内容。所以要把该返回值再用来创建TextField

TextArea,可编辑。与TextField区别是可以换行,可多行显示

private string textFieldString = "text field";void OnGUI () {textFieldString = GUI.TextField (new Rect (25, 25, 100, 30), textFieldString);}
Toggle,一个checkbox,也就是单选框。同样的,需要把返回值再用来创建Toogle
    private bool toggleBool = true;        void OnGUI () {        toggleBool = GUI.Toggle (new Rect (25, 25, 100, 30), toggleBool, "Toggle");    }
ToolBar,创建多个button,同时只能选中一个。需要利用返回值。

SelectionGrid,相当于多行的ToolBar

    private int selectionGridInt = 0;    private string[] selectionStrings = {"Grid 1", "Grid 2", "Grid 3", "Grid 4"};        void OnGUI () {        selectionGridInt = GUI.SelectionGrid (new Rect (25, 25, 300, 60), selectionGridInt, selectionStrings, 2);//2表示水平方向上排2个button        }

HorizontalSlider和VerticalSlider水平滑动条和垂直滑动条。滑动时返回值在最大值和最小值之间改变。需要利用返回值

HorizontalScrollBar和VerticalScrollBar与滑动条区别不大。多了个参数,控制滑块大小。

ScrollView
使用GUI.BeginScrollView()和GUI.EndScrollView();其中BeginScrollView需要两个矩形作为参数。第一个矩形是ScrollView的可视范围。第二个矩形是ScrollView的拖动范围。


3.GUILayout
自动布局。GUI(固定布局)可以和GUILayout(自动布局)同时使用
在固定布局时,可以使用GUI.BeginGroup 和GUI.EndGroup来定义一个新的空间来放置多个控件,相当于在屏幕空间中定义了一个小的屏幕,超出这个小屏幕的空间将被裁减。
在自动布局时,可以用GUILayout.BeginArea和GUILayout.EndArea来实现类似的功能。在Area内的控件,像Box和Button这种带有背景的控件会自动拉伸到整个Area宽度。如果不在Area内,控件会有一个默认宽度,不会拉伸到和屏幕同宽。

可以使用GUILayoutOption来覆盖GUILayout的一些设置。GUILayoutOption我们不直接使用,而是使用GUILayout.Width等方法获取
    void OnGUI () {        GUILayout.BeginArea (new Rect (100, 50, Screen.width-200, Screen.height-100));        GUILayout.Button ("I am a regular Automatic Layout Button");        GUILayout.Button ("My width has been overridden", GUILayout.Width (95));        GUILayout.EndArea ();    }

如上例,本来第二个button的宽度应该跟Area同宽,但是加上
GUILayout.Width (95)
之后,就只有95像素宽了。

还有如果Button不在Area里,会有一个默认宽度,也可以用GUILayout.Width来自定义宽度。

但是再宽也不会超过屏幕宽度或Area宽度(被裁减掉了)


自动布局时,默认情况下,各控件由上到下依次显示。
可以使用GUILayout.BeginHoriztontal(),GUILayout.EndHorizontal()GUILayout.BeginVertical(), and GUILayout.EndVertical().来控制各控件水平显示或垂直显示。可嵌套。

0 0