UG1L3——多选框和单选框

本章代码关键字

1
GUI.Toggle()        //绘制多选框,第二个参数需要传入当前是否选中的值,返回这一帧是否被选中的值

多选框

GUI.Toggle​会绘制一个多选框,第二个参数需要传入当前是否选中的值,返回这一帧是否被选中的值,其余参数和其他控件差不多
因此,使用GUI.Toggle​绘制的多选框,必须要在外面声明一个bool​变量,用来存储多选框是否被选中的值
该变量需要传入到GUI.Toggle​内,再返回给该变量,这样才能实现多选框选中的效果

1
2
3
4
5
6
7
private bool isSel;

private void OnGUI()
{
//第二个参数应该用变量,而不是固定的常量
isSel = GUI.Toggle(new Rect(0, 0, 100, 30), isSel, "效果开关");
}

自定义样式的显示问题

GUI.Toggle​使用GUIStyle​时,我们可以通过设置背景图来自定义是否选中的图标,Normal是未选中时图标,OnNormal是选中时图标
但是直接设置会有显示问题,需要设置如下内容:

  • 背景图拉伸,铺满文字:设置Fixed Width和Fixed Height,以设置背景图的宽高
  • 文字与背景图重叠:设置Padding,可偏移文本到UI控件的边缘的量,可用于设置文本位置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private bool isSel;
private bool isSel2;

public GUIStyle style;

private int nowSelIndex = 1;

private void OnGUI()
{
//第二个参数应该用变量,而不是固定的常量
isSel = GUI.Toggle(new Rect(0, 0, 100, 30), isSel, "效果开关");
//修改固定宽高 fixedWidth 和 fixedHeight
//修改从GUIStyle边缘到内容起始处的空间 padding
isSel2 = GUI.Toggle(new Rect(0, 40, 100, 30), isSel2, "音效开关", style);
}

单选框

单选框是基于多选框实现的,通过一个int​来标识哪个选项被选中了,
通过比较标识值与选项对应的值来决定哪个单选框显示被选中,
当单选框被选中时,就修改标识的值,从而实现单选框的效果

注意,下面的代码是,那个选项被选中,那个if语句块就会每帧都执行一次,而不是修改选项时才会执行一次!

注意:下面的代码中当Toggle被选中,对应的那个if代码块就会每帧都执行一次,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private int nowSelIndex = 1;

private void OnGUI()
{
//单选框是基于多选框的实现
//关键:通过一个int标识来决定是否选择
if (GUI.Toggle(new Rect(0, 100, 100, 30), nowSelIndex == 1, "选项一"))
{
nowSelIndex = 1;
}
if (GUI.Toggle(new Rect(0, 140, 100, 30), nowSelIndex == 2, "选项一"))
{
nowSelIndex = 2;
}
if (GUI.Toggle(new Rect(0, 180, 100, 30), nowSelIndex == 3, "选项一"))
{
nowSelIndex = 3;
}
}