前言

仅供本人Unity——UI方面的学习参考

UI

即user interface的简称,提供用户与程序进行交互的界面,unity中提供了制作UI的手段。

GUI

即时模式游戏用户交互界面(IMGUI),简称为GUI。它是一个代码驱动的UI系统。

主要作用

作为程序员的调试工具,创建游戏内的调试工具,为脚本组件创建自定义检视面板,创建新的编辑器窗口和工具以拓展Unity本身(一般用作内置游戏工具)

不要用他为玩家制作UI功能。

工作原理

在继承MonoBehaviour的脚本中的特殊函数里,调用GUI提供的方法,类似生命周期函数

注意:每帧执行,相当于适用于专门绘制GUI界面的函数,一般只在其中执行GUI相关界面绘制和操作逻辑,该函数在OnDisable之前,LateUpate之后执行,只要是继承了Mono的脚本,都可以在OnGUI上绘制GUI

1
2
3
4
private void OnGUI()
{
//在其中书写GUI相关代码即可显示GUI内容
}

基础知识

重要参数及文本和按钮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//GUI控件绘制的共同点
//他们都是GUI公共类中提供的静态函数,直接调用即可
//他们的参数都大同小异
//位置参数 Rect参数 x y位置 w h尺寸
//显示文本 string参数
//图片信息 Texture参数
//综合信息 GUIContent参数
//自定义样式 GUIStyle参数
//每一种控件都有多种重载,都是各个参数的排列组合
//必备的参数内容:位置信息和显示信息


//文本控件
//基本使用
//0,0位置为游戏窗口左上角

public Texture tex;
public Rect rect;
public Rect rect1;
public GUIContent content;
public GUIStyle style;
public Button btnRect;
public GUIContent btnContent;
public GUIStyle btnStyle;

private void OnGUI()
{

GUI.Label(new Rect(0,0,100,20),"你是一个一个一个",style);
GUI.Label(rect,tex);
//综合使用
GUI.Label(rect1,content)
//可以获取当前鼠标或着键盘选中的GUI控件,对应的tooltip信息
Debug.log(GUI.tooltip);
//自定义样式
//利用GUIStyle类进行更改
}

//按钮控件
//基本使用
//综合使用
GUI.Button(btnRect);//返回值为bool类型,如果被点击了则返回true,否则返回false
if(GUI.Button(btnRect,btnContent,btnStyle))//只能检测一次点击,按下与释放同时进行判定为一次点击
{
Debug.Log("被点击了");
}

if(GUI.RepeatButton(btnRect,btnContent))//按下就会响应,返回true
{
Debug.Log("长按被点击");
}

多选框和单选框

多选框

1
2
3
4
5
6
7
8
9
10
private bool isSel1;
private bool isSel2;
public GUIStyle style;
//Toggle返回值为与当前bool变量相反的布尔值
isSel=GUI.Toggle(new Rect(0,0,100,30),isSel1,"效果开关");
//显示问题
//修改固定宽高 fixedWidth和fixedHeight
//修改从GUIStyle边缘到内容起始处的空间 padding
isSel2=GUI.Toggle(new Rect(0,40,100,30),isSel2,"音效开关",style);

单选框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private int nowSelIndex=1;
//基于多选框实现
//关键通过一个int标识来决定是否选中
if(GUI.Toggle(new Rect(0,60,100,30),nowSelIndex==1,"选项一")
{
nowSelIndex=1;
}
if(GUI.Toggle(new Rect(0,60,100,30),nowSelIndex==2,"选项二"))
{
nowSelIndex=2;
}

if(GUI.Toggle(new Rect(0,60,100,30),nowSelIndex==3,"选项三"))
{
nowSelIndex=3;
}

输入框和拖动条

输入框

1
2
3
private string inputStr;
//普通输入
inputStr=UI.TextField(new Rect(0,0,100,30),inputStr);