Unity 编辑器篇|(九)编辑器美化类( GUIStyle、GUISkin、EditorStyles) (全面总结 | 建议收藏)

发布时间:2024年01月19日

1. GUIStyle

  • GUIStyle是一个用于定制GUI控件样式的类,它包含了控件的外观属性,如字体、颜色、背景等。开发者可以通过创建自定义的GUIStyle来改变UI控件的外观,以适应不同的需求和风格。GUIStyle不仅可以应用于Unity的旧版UI系统(IMGUI),还可以用于新版的UI系统。

1.1 参数总览

静态函数描述
active按下控件时的渲染设置。
alignment文本对齐。
border所有背景图像的边框。
clipping如何处理要渲染的内容太大而无法放入给定区域的情况。
contentOffset要应用于该 GUIstyle 的内容的像素偏移。
fixedHeight如果不为 0,则使用该样式呈现的任何 GUI 元素都将具有此处指定的高度。
fixedWidth如果不为 0,则使用该样式呈现的任何 GUI 元素都将具有此处指定的宽度。
focused元素具有键盘焦点时的渲染设置。
font用于渲染的字体。如果为 null,则改为使用当前 GUISkin 的默认字体。
fontSize要使用的字体大小(用于动态字体)。
fontStyle要使用的字体样式(用于动态字体)。
hover鼠标悬停在控件上时的渲染设置。
imagePositionGUIContent 的图像和文本的组合方式。
lineHeight具有该样式的文本行的高度,以像素为单位。(只读)
margin以该样式呈现的元素与任何其他 GUI 元素之间的边距。
name该 GUIStyle 的名称。用于根据名称获取 GUIStyle。
normal正常显示组件时的渲染设置。
onActive启用和按下元素时的渲染设置。
onFocused元素具有键盘焦点并且启用时的渲染设置。
onHover控件处于启用状态并且鼠标悬停在其上方时的渲染设置。
onNormal控件处于启用状态时的渲染设置。
overflow要添加到背景图像的额外空间。
padding从 GUIStyle 边缘到内容起始处的空间。
richText为文本格式标记启用 HTML 样式标记。
stretchHeight是否可以垂直拉伸该样式的 GUI 元素来改善布局效果?
stretchWidth是否可以水平拉伸该样式的 GUI 元素来改善布局效果?
wordWrap文本是否应该自动换行??

1.2 样式代码

using UnityEditor;
using UnityEngine;

public class EditorGUIExample : EditorWindow
{
    [MenuItem("Window/styles")]
    public static void Test()
    {
        EditorWindow.GetWindow<EditorGUIExample>().Show();
    }

    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));
    }
}

1

2. GUISkin

  • GUISkin是一个可应用于GUI的GUIStyle集合,它可以将样式应用于整个UI,而不是单独的控件本身。开发者可以通过创建自定义的GUISkin来定义一组相关的GUIStyle,然后在整个UI中应用这个GUISkin,以实现统一的外观效果。在Unity中,可以通过Project面板中的右键菜单创建GUISkin,并直接在Inspector面板中修改样式。

2.1 参数总览

静态函数描述
box GUI.Box控件默认使用的样式。
button GUI.Button控件默认使用的样式。
customStyles针对特定需求的 GUI 样式的数组。
font用于所有样式的默认字体。
horizontalScrollbarGUI.HorizontalScrollbar 控件的背景部分默认使用的样式。
horizontalScrollbarLeftButtonGUI.HorizontalScrollbar 控件上的向左按钮默认使用的样式。
horizontalScrollbarRightButtonGUI.HorizontalScrollbar 控件上的向右按钮默认使用的样式。
horizontalScrollbarThumbGUI.HorizontalScrollbar 控件中用于拖动的滑块默认使用的样式。
horizontalSliderGUI.HorizontalSlider 控件的背景部分默认使用的样式。
horizontalSliderThumbGUI.HorizontalSlider 控件中用于拖动的滑块默认使用的样式。
labelGUI.Label 控件默认使用的样式。
scrollView滚动视图控件(请参阅 GUI.BeginScrollView)的背景默认使用的样式。
settings定义控件应如何配置该皮肤使用的通用设置。
textAreaGUI.TextArea 控件默认使用的样式。
textFieldGUI.TextField 控件默认使用的样式。
toggleGUI.Toggle 控件默认使用的样式。
verticalScrollbarGUI.VerticalScrollbar 控件的背景部分默认使用的样式。
verticalScrollbarDownButtonGUI.VerticalScrollbar 控件上的向下按钮默认使用的样式。
verticalScrollbarThumbGUI.VerticalScrollbar 控件中用于拖动的滑块默认使用的样式。
verticalScrollbarUpButtonGUI.VerticalScrollbar 控件上的向上按钮默认使用的样式。
verticalSliderGUI.VerticalSlider 控件的背景部分默认使用的样式。
verticalSliderThumbGUI.VerticalSlider 控件中用于拖动的滑块默认使用的样式。
window窗口控件(另请参阅:GUI.Window)默认使用的样式。

2.2 创建自定义Skin

1
2

            GUISkin skin = Resources.Load<GUISkin>("New GUISkin");
            _titleStyle = skin.label;
  • 要使用自定义的GUISkin,只需要创建一个GUISkin字段,然后将自定义的GUISkin文件拖入。
  • 最后设置GUI.Skin = MyCustomSkin就OK。 要将GUI.Skin设为默认的,只需GUI.Skin=null。
  • 并且有了GUI.Skin后,Skin里面有许多的Style类型。看见GUIStyle类型的参数时,我们是可以直接传入GUI.Skin中GUIStyle的名称字符串的,系统自动帮我选取字符串对应的GUIStyle。

3. EditorStyles

  • EditorStyles是Unity编辑器中用于定制编辑器界面的样式类。它包含了编辑器界面中各种控件的样式属性,如工具栏、菜单、对话框等。开发者可以通过创建自定义的EditorStyles来改变编辑器的界面风格,以适应不同的需求和美观度。

2.1 参数总览

静态函数描述
boldFont加粗字体。
boldLabel粗体标签的样式。
centeredGreyMiniLabel采用小号字体且字体以灰色居中显示的标签的样式。
colorField用于 Color 字段的标题的样式。
foldout用于 EditorGUI.Foldout 的标题的样式。
foldoutHeader用于 EditorGUILayout.BeginFoldoutHeaderGroup 的标题的样式。
foldoutHeaderIcon用于 EditorGUILayout.BeginFoldoutHeaderGroup 的图标的样式。
foldoutPreDrop用于 EditorGUI.Foldout 的标题的样式。
helpBox用于 EditorGUI.HelpBox 的背景框的样式。
iconButtonStyle used for a standalone icon button.
inspectorDefaultMargins将内容包含在采用此样式的垂直组中,以获取检视面板中使用的默认边距。
inspectorFullWidthMargins将内容包含在采用此样式的垂直组中,以获取检视面板中的全宽边距。
label用于采用前缀标签的所有 EditorGUI 重载上标记的样式。
largeLabel采用大号字体的标签的样式。
layerMaskField用于层遮罩的标题的样式。
linkLabel用于链接的样式。
miniBoldFont小号加粗字体。
miniBoldLabel粗体小标签的样式。
miniButton用于独立平台小按钮的样式。
miniButtonLeft用于水平按钮组中最左边按钮的样式。
miniButtonMid用于水平组中中间按钮的样式。
miniButtonRight用于水平组中最右边按钮的样式。
miniFont小号字体。
miniLabel采用小号字体的标签的样式。
miniPullDown下拉选单控件使用的样式。
miniTextField较小的文本字段。
numberField用于编辑器的数字字段的样式。
objectField用于对象字段的标题的样式。
objectFieldMiniThumb用于具有缩略图的对象字段的样式(例如纹理)。
objectFieldThumb用于对象字段中 Select 按钮的标题的样式。
popup用于 EditorGUI.Popup、EditorGUI.EnumPopup 的样式。
radioButton用于单选按钮的样式。
selectionRectStyle used to draw a marquee selection rect in the SceneView.
standardFont标准字体。
textArea用于 EditorGUI.TextArea 的样式。
textField用于 EditorGUI.TextField 的样式。
toggle用于 EditorGUI.Toggle 的标题的样式。
toggleGroup用于 EditorGUILayout.BeginToggleGroup 的标题的样式。
toolbar窗口顶部的工具栏背景。
toolbarButton工具栏中按钮和开关的样式。
toolbarDropDown工具栏下拉列表。
toolbarPopup工具栏弹出窗口。
toolbarSearchField工具栏搜索字段。
toolbarTextField工具栏文本字段。
whiteBoldLabel白色粗体标签的样式。
whiteLabel白色标签的样式。
whiteLargeLabel白色大标签的样式。
whiteMiniLabel白色小标签的样式。
wordWrappedLabel自动换行标签的样式。
wordWrappedMiniLabel自动换行小标签的样式。

1.2 反射获取所有EditorStyles

using System.Collections.Generic;
using System.Reflection;
using UnityEditor;
using UnityEngine;

public class EditorGUIExample : EditorWindow
{
    static List<GUIStyle> styles = null;
    [MenuItem("Window/styles")]
    public static void Test()
    {
        EditorWindow.GetWindow<EditorGUIExample>("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();
    }

}

2

文章来源:https://blog.csdn.net/backlighting2015/article/details/135575003
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。