unityGUI全称:即使模式游戏用户交互界面(IMGUI)
在Unity中一般简称为GUI,它是一个代码驱动的UI系统。
Unity的GUI有自己的生命周期,在继承Monobehaviour的脚本中的特殊函数中在OnGUI函数中书写GUI相关逻辑。
注意:
Label,无返回值
GUI.Label(Rect,内容,样式);
GUI.Button(Rect,内容,样式);
Toggle,点击后返回一个与传入bool值相反的bool值,bool返回值。
自定义多选框设置GUIStyle选中效果和取消效果的是normal和on normal。
GUI.Toggle(Rect, bool标识, 内容, 样式);
单选框是多选框的一种特殊形式。我们使用一个int标识来处理,如下代码
private void index = 1;
private void OnGUI()
{
if(GUI.Toggle(new Rect(0,60,100,30), index == 1, "选项1"))
{
index = 1;
}
if(GUI.Toggle(new Rect(0,100,100,30), index == 2, "选项2"))
{
index = 2;
}
if(GUI.Toggle(new Rect(0,140,100,30), index == 3, "选项3"))
{
index = 3;
}
}
我们就以第二个index == 2为例分析一下:
首先进入第二个if判断,index == 2为false,这时点击第二个Toggle时,Toggle会返回true,这时就会进入if语句块,并将index赋值为2,下一帧进入OnGUI后渲染出来的UI就是选项2被选中。
GUI.TextArea(Rect, 内容, Length, 样式);
GUI.TextField(Rect, 内容, Length, 样式);
GUI.PasswordField(Rect, 内容,替换字符 , Length, 样式);
GUI.HorizontalSlider(Rect, nowValue, bottomValue, topValue, 样式1, 样式2, 样式3);
GUI.VerticalSlider(Rect, nowValue, bottomValue, topValue, 样式1, 样式2, 样式3);
DrawTexture,无返回值
GUI.DrawTexture(Rect, Texture, ScaleMode, bool alphaBlend, float imageAspect ......);
ScaleMode:
alpha:是用来控制图片是否开启透明通道。
imageAspect:自定义宽高比,如果不填默认为0,会使用图片原始宽高比。
box,无返回值。不常用
GUI.Box(rect, 内容, 样式);
Toolbar,int返回值,可以用来制作类似于unity快捷工具栏的UI。
GUI.Toolbar(Rect, int标识, 内容数组, 样式);
private int toolbarIndex = 0;
private string[] toolbarInfos = new []{"123","456","789"};
private void OnGUI(){
toolbarIndex = GUI.Toolbar(new Rect(0,0,200,30), toolbarIndex, toolbarInfos);
//不同选择对应不同的逻辑处理
switch(toolbarIndex){
case 0:
break;
case 1:
break;
case 2:
break;
}
}
SelectionGrid,与工具栏相同,但多一个限制每行的最多个数的属性xCount。
BeginGroup,无返回值,主要用于对GUI控件进行分组。
GUI.BeginGroup(Rect,内容,样式);
GUI.BeginGroup(Rect,内容,样式);
//中间添加要分组的控件
GUI.EndGaroup();
BeginScorllView,返回值为Vector2
GUI.BeginScorllView(viewRect, nowPos, showRect, 样式);
参数介绍:
GUI.BeginScorllView(viewRect, nowPos, showRect, 样式);
//可视窗口的内容
GUI.EndScorllView();
Window,Rect返回值。用于制作UI窗口,Window中的UI控件应当写在Window的委托参数的函数中。
GUI.Window(id, Rect, 控件委托, 内容, 样式);
参数介绍:
ModalWindow,无返回值,当出现模态窗口时只有处理完警告弹窗的逻辑后,其他控件逻辑才允许被继续处理常用于警告弹窗。
GUI.Window(id, Rect, 控件委托, 内容, 样式);
使用成员变量接收Rect返回值,并在委托函数中写GUI.DragWindow方法。
DragWindow可以使用重载传入Rect参数,作用是决定窗口的那一部分位置可以被拖动。
默认不填就是窗口的所有位置都可以被拖动。
GUIskin就是一个GUIstyle的集合。
GUIskin可以在资源视图右键创建。
GUI.skin = skin;
GUILayout拥有GUI类所有的控件。但与GUI类不同的是,GUILayout可以自动排序。
BeginHorizontal
EndHorizontal
BeginVertical
EndVertical
一些控件是有GUILayoutOption[]的params数组参数的,直接添加以下方法即可。
//控件的固定宽高
GUILayout.Width();
GUILayout.Height();
//允许控件的最小宽高
GUILayout.MinWidth();
GUILayout.MinHeight();
//允许控件的最大宽高
GUILayout.MaxWidth();
GUILayout.MaxHeight();
//允许或禁止水平拓展
GUILayout.ExpandWidth();
GUILayout.ExpandHeight();