当前位置: 首页 > news >正文

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

目录

  • 1. GUIStyle
    • 1.1 参数总览
    • 1.2 样式代码
  • 2. GUISkin
    • 2.1 参数总览
    • 2.2 创建自定义Skin
  • 3. EditorStyles
    • 2.1 参数总览
    • 1.2 反射获取所有EditorStyles

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的默认GUIStyleGUIStyle style = GUI.skin.button;//下面开始修改style.fontStyle = FontStyle.Italic;//文字是斜体style.fontSize = 20;//文字大小20style.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

相关文章:

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

目录 1. GUIStyle1.1 参数总览1.2 样式代码 2. GUISkin2.1 参数总览2.2 创建自定义Skin 3. EditorStyles2.1 参数总览1.2 反射获取所有EditorStyles 1. GUIStyle GUIStyle是一个用于定制GUI控件样式的类&#xff0c;它包含了控件的外观属性&#xff0c;如字体、颜色、背景等。…...

Spring Boot Starters

Spring Boot Starters 概述 Spring Boot Starters是一系列为特定应用场景预设的依赖管理和自动配置方案。每个Starter都是为了简化特定类型的项目构建和配置。例如&#xff0c;spring-boot-starter-web是为创建基于Spring MVC的Web应用程序而设计的。 Starter的结构 一个典型…...

Qt防止创建窗口抢焦点

问题是&#xff0c;当我在 Qt 中打开一个新窗口时&#xff0c;它会自动窃取前一个应用程序的焦点。 有什么办法可以防止这种情况发生吗&#xff1f; setAttribute(Qt::WA_ShowWithoutActivating);这会强制窗口不激活。即使有Qt::WindowStaysOnTopHint flag 出处&#xff1a; S…...

shared_ptr 与 unique_ptr 的转换 笔记

推荐B站文章&#xff1a; 6.shared_ptr与unique_ptr_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p6&vd_sourcea934d7fc6f47698a29dac90a922ba5a3我的往期文章&#xff1a; 独占指针&#xff1a;unique_ptr 与 函数调用-CSDN博客https://blog.csdn.n…...

python windows和linux 文件同步

在Python中&#xff0c;可以使用paramiko库来实现Windows和Linux之间的文件同步。paramiko是一个用于SSH连接的Python库&#xff0c;可以用于在Windows和Linux之间进行文件传输。 以下是一个简单的示例代码&#xff0c;演示如何使用paramiko库在Windows和Linux之间同步文件&am…...

【数据结构】72变的双端队列

双端队列 前言一、双端队列1.1 双端队列的定义1.2 输入受限的双端队列1.3 输出受限的双端队列1.5 输入输出都受限的双端队列1.6 小结 二、双端队列的使用2.1 双端队列的出队序列——暴力求解2.1.1 栈的出栈序列2.1.2 输入受限的双端队列2.1.3 输出受限的双端队列2.1.4 输入输出…...

kafka为什么不支持读写分离?

kafka为什么不支持读写分离&#xff1f; 在kafka中&#xff0c;生产者写入消息&#xff0c;消费者读取消息的操作都是与 leader 副本进行交互的&#xff0c;从而实现的是一种主写主读的生产消费模型。kafka不支持读写分离&#xff0c;也就是主写从读。 读写分离有以下不足&am…...

arcgis 面要素shp数据处理

面要素是工作中用到最多的&#xff0c;那么面要素是如何形成的呢&#xff0c;主要还是由闭合的线要素转换而成。在面要素数据中常用的有以下几点&#xff1a; 一、 线转面&#xff08;要素转面&#xff09; 通过上一篇得到了点转线的要素&#xff0c;那么根据上节的线要素&am…...

数轴(0 ~ m)上有n个不同点,最多只能移动一个点,移动到[1, m]中任意一点,求最终最小相邻两个点的距离的最大值是什么

题目 思路:先找到相邻距离最小的位置,假设为pos, 那么不是移动第pos个点就是移动第(pos - 1)个点,先移动pos点,用数组vec存除了pos点之外的所有点,求出最小相邻距离和最大相邻距离,那么肯定将pos点插入到最大相邻距离中。 #include <bits/stdc++.h> using namesp…...

BGP路由反射-数据中心IDC项目经验

一、背景描述 R1,R2,R3在AS200区域内&#xff0c;R1和R2,R1和R3建立OSPF&#xff0c;宣告接口互联. AS200区域内&#xff0c;R1和R2建立IBGP, R1和R3建立IBGP R2和R4建立EBGP, R3和R5建立EBGP。 网络拓扑&#xff1a; 二、故障现象 R1和R2可以收到来自AS100区域R4的E…...

提取视频中的某一帧画面,留住视频中的美好瞬间

你是否曾经被视频中的某一帧画面深深吸引&#xff0c;却又惋惜于无法将其永久保存&#xff1f;现在&#xff0c;有了我们【媒体梦工厂】&#xff0c;这一遗憾将成为过去&#xff0c;这个软件可以提取视频中的某一帧保存为图片&#xff0c;为你留住那些稍纵即逝的美好。 所需工…...

一个好用的服务器控制面板

简介 它是一个免费开源的管理面板工具&#xff0c;可以帮助你集中管理多个服务器和网站。Ajenti 支持 Linux、BSD、Mac OS X和Windows 等多个操作系统&#xff0c;并且可以通过一个直观的 Web 界面来完成各种系统管理任务。 相比于其他管理面板&#xff0c;Ajenti有以下几个优…...

软件测评中心▏软件系统测试的定义与测试流程简析

软件系统测试是指在软件开发的各个阶段对软件系统进行全面、系统的测试&#xff0c;以发现并修复潜在的问题和错误。系统测试旨在确保软件在各种不同的环境和使用条件下都能正常运行&#xff0c;满足用户需求&#xff0c;并且具备良好的性能和稳定性&#xff0c;包括以下测试流…...

基于JavaWeb+SSM+Vue基于微信小程序生鲜云订单零售系统的设计和实现

基于JavaWebSSMVue基于微信小程序生鲜云订单零售系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计…...

查询列表实时按照更新时间降序排列 没有更新时间就按创建时间

例子: sql两个字段排序 ORDER BY update_time DESC , create_time DESC <select id"selectLawIllegalActivitiesList" parameterType"LawIllegalActivities" resultMap"LawIllegalActivitiesResult"><include refid"selectL…...

愉快的使用vscode刷leetcode,开启摸鱼新高度

文章目录 1. 安装leetcode插件2. 安装node.js3. vscode配置 1. 安装leetcode插件 插件扩展中搜索LeetCode&#xff0c;一般刚开始都是第一个&#xff0c;如下图所示。 2. 安装node.js window安装方法 去 node.js官网 下载相应的安装包&#xff0c;一路next即可。 ubuntu安…...

openssl3.2/test/certs - 003 - genroot “Root CA“ root-key2 root-cert2

文章目录 openssl3.2/test/certs - 003 - genroot "Root CA" root-key2 root-cert2概述笔记END openssl3.2/test/certs - 003 - genroot “Root CA” root-key2 root-cert2 概述 索引贴 > openssl3.2 - 官方demo学习 - test - certs 笔记 // openssl3.2/test/…...

npm install出错的各种情况

1.npm不再支持签名证书&#xff0c;npm install 走的是http协议&#xff0c;需要通过数字证书保证 解决方法&#xff1a; 解决方法&#xff1a;1、取消ssl验证&#xff1a;npm config set strict-ssl false 这个方法一般就可以解决了。 2、更换npm镜像源&#xff1a;npm confi…...

【Docker】Docker学习⑤ - Docker数据管理

【Docker】Docker学习⑤ - Docker数据管理 一、Docker简介二、Docker安装及基础命令介绍三、Docker镜像管理四、Docker镜像与制作五、Docker数据管理1. 数据类型1.1 什么是数据卷&#xff08;data volume&#xff09;1.1.1 创建APP目录并生成web页面1.1.2 启动容器并验证数据1.…...

C/C++ - 编程语法特性

目录 标准控制台框架 输入输出对象 命名空间 标准控制台框架 头文件 ​#include <iostream>​​ 告诉编译器我们要使用iostream库尖括号中的名字指定了某个头文件(header) 入口函数 ​int main(void)​​ 返回 ​return 0;​​ 输出语句 ​std::cout << "H…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...