UG1L9——GUISkin

本章代码关键字

1
2
3
4
5
GUI.color                //GUI全局着色颜色
GUI.contentColor //文本着色颜色
GUI.backgroundColor //背景着色颜色
GUISkin //可以关联GUISkin文件,赋值给GUI.skin
GUI.skin //设置修改默认的GUI控件样式,即不传入GUIStyle的UI控件的绘制都会有影响

全局颜色

  • GUI.color​ 是全局的着色颜色,影响背景和文本颜色,包括对 style​ 的影响,可以再该改回去
  • GUI.contentColor​ 是文本着色颜色(受到全局着色指令的影响 会与全局颜色做乘法)
  • GUI.backgroundColor​ 是背景着色颜色(受到全局着色指令的影响 会与全局颜色做乘法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GUIStyle style;

private void OnGUI()
{
//全局的着色颜色 影响背景和文本颜色 包括对style的影响
GUI.color = Color.red;

//文本着色颜色(受到全局着色指令的影响 会与全局颜色做乘法)
GUI.contentColor = Color.yellow;
GUI.Button(new Rect(0, 0, 100, 30), "测试按钮");
//背景着色颜色(受到全局着色指令的影响 会与全局颜色做乘法)
GUI.backgroundColor = Color.red;
GUI.Label(new Rect(0, 50, 100, 30), "测试按钮", style);
//全局的着色颜色可以再改回去
GUI.color = Color.white;
GUI.Button(new Rect(0, 100, 100, 30), "测试按钮", style);
}

整体皮肤样式

GUISkin​ 是所有 GUI 控件的 GUIStyle​ 集合体,包括按钮、文本等等样式,Project 窗口右键可以创建 GUI Skin 文件
它可以帮助我们整套的设置自定义样式,相对每个控件设置 GUIStyle​ 要方便一些

image

GUI.skin​ 是全局的默认的 GUI 控件样式属性,会影响所有不传入 GUIStyle的 UI 控件的绘制,
GUISkin​ 文件可以关联到 GUISkin​ 类型变量上,然后 GUISkin​ 类型变量就可以赋值给 GUI.skin​,即可修改默认的 GUI 控件样式

1
2
3
4
5
6
7
8
9
10
11
public GUISkin skin;

private void OnGUI()
{
//GUISkin格式相当于所有GUI控件的style集合体,设置修改默认的GUI控件样式
GUI.skin = skin; //置空相当于没有设置
GUI.Button(new Rect(0, 0, 100, 30), "测试按钮");

GUI.skin = null; //置空相当于没有设置
GUI.Button(new Rect(0, 0, 100, 30), "测试按钮");
}

除了修改全局样式,GUI.skin​ 还可以用于各个控件默认的全局样式,例如 GUI.skin.button​ 就可以获取到当前按钮默认样式 GUIStyle​,
我们可以基于默认样式创建新的 GUIStyle​,让控件在按照默认样式绘制时,可以修改部分样式属性,也不影响全局控件样式,例如:

例如,我们可以基于默认的按钮 GUIStyle​,在此基础上做一定的修改(例如按钮左侧收缩效果):

1
2
3
4
5
6
7
8
9
RectOffset offset = GUI.skin.button.margin;
GUIStyle newStyle = new(GUI.skin.button)
{
margin = new RectOffset(20, offset.right, offset.top, offset.bottom),
};
GUILayout.Button(new GUIContent("newStyle1"), newStyle);
GUILayout.Button(new GUIContent("newStyle2"), newStyle);
GUILayout.Button(new GUIContent("DefaultStyle1"));
GUILayout.Button(new GUIContent("DefaultStyle2"));

显示效果:

image

可见,我们实现了一个基于默认按钮的 GUIStyle​ 效果收缩左边的 GUIStyle