【IMGUI】 GUIStyle、GUISkin、EditorStyles

先看一个例子: 

    private void OnGUI()
    {
        //通过在GUISkin中获取button的默认GUIStyle
        GUIStyle style = GUI.skin.button;
        //下面开始修改
        style.fontStyle = FontStyle.Italic;//文字是斜体
        style.fontSize = 20;//文字大小20
        style.richText = true; //文字是否支持富文本
 
        GUILayout.Button("<color=red>我是红色的按钮</color>", style,GUILayout.Width(180));
    }

Unity编辑器中有一个默认的皮肤预设,这个预设里面对于button、toggle、textField等等控件的样子都进行的设定。

皮肤预设(GUI Skin)可以在Project窗口里面创建出来。

 里面包含对如下控件样子的设定。GUISkin 是可应用于 GUI 的 GUIStyle 的集合。皮肤 (Skin) 的主要目的将样式应用于整个 UI,而不是应用于单独的控件本身。

要使用自定义的GUISkin,只需要创建一个GUISkin字段,然后将自定义的GUISkin文件拖入。

最后设置GUI.Skin = MyCustomSkin就OK。 要将GUI.Skin设为默认的,只需GUI.Skin=null。

并且有了GUI.Skin后,Skin里面有许多的Style类型。看见GUIStyle类型的参数时,我们是可以直接传入GUI.Skin中GUIStyle的名称字符串的,系统自动帮我选取字符串对应的GUIStyle。

GUIStyle的属性

属性:功能:
Name可用于指代此特定样式的文本字符串
Normal控件在默认状态下显示的背景图像和文本颜色
Hover当鼠标位于控件上方时显示的背景图像和文本颜色
Active当鼠标主动单击控件时显示的背景图像和文本颜色
Focused控件获得键盘焦点时显示的背景图像和文本颜色
On Normal控件在启用状态下显示的背景图像和文本颜色
On Hover当鼠标位于已启用的控件上方时显示的背景图像和文本颜色
On Active当鼠标主动单击已启用的控件时显示的属性
On Focused已启用的控件获得键盘焦点时显示的背景图像和文本颜色
Border背景__图像每条边的像素数(不受控件形状比例影响) | |Padding__从控件每个边缘到内容起始位置的空间(以像素为单位)。
Margin以此样式渲染的元素与任何其他 GUI 控件之间的边距。
Overflow要添加到背景图像的额外空间。
Font用于此样式中所有文本的字体
Image Position背景图像和文本的组合方式。
Alignment标准文本对齐选项。
Word Wrap如果启用此属性,到达控件边界的文本将换到下一行
Text Clipping如果启用了 Word Wrap__,选择超出控件边界的文本的处理方式 | |        Overflow__任何超出控件边界的文本都将继续超出边界
  Clip任何超出控件边界的文本都将隐藏起来
Content Offset除了所有其他属性之外,内容在 X 和 Y 轴上移位的像素数
  X左/右偏移
  Y上/下偏移
Fixed Width控件宽度的像素数,此值将覆盖任何提供的 Rect() 值
Fixed Height控件高度的像素数,此值将覆盖任何提供的 Rect() 值
Stretch Width如果启用此属性,则可以水平拉伸使用此样式的控件来改善布局。
Stretch Height如果启用此属性,则可以垂直拉伸使用此样式的控件来改善布局。

EditorStyles

用于 EditorGUI 控件的常见 GUIStyle。

通过以下方式可以显示出所有的样式:

#你好Unity3D#系统所有EditorStyles | 雨松MOMO程序研究院 (xuanyusong.com)

public class MyWindows : EditorWindow  
{
 
	static List<GUIStyle> styles = null;
	[MenuItem("Window/styles")]
	public static void Test() {
		EditorWindow.GetWindow<MyWindows>("styles");
 
		styles = new List<GUIStyle> (); 
		foreach(PropertyInfo fi in typeof(EditorStyles).GetProperties(BindingFlags.Static|BindingFlags.Public|BindingFlags.NonPublic))
		{
			object o = fi.GetValue (null, null);
			if (o.GetType () == typeof(GUIStyle)) {
				styles.Add (o as GUIStyle);
			}
		}
	}
 
	public Vector2 scrollPosition = Vector2.zero;
	void OnGUI() 
	{
		scrollPosition = GUILayout.BeginScrollView (scrollPosition);
		for (int i = 0; i < styles.Count; i++) {
			GUILayout.Label ("EditorStyles." +styles[i].name , styles[i]);
		}
		GUILayout.EndScrollView ();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值