Unity 编辑器样式实战:EditorStyles 内置样式速查 + 自定义样式完整指南
【免费下载链接】UnityCsReferenceUnity C# reference source code.项目地址: https://gitcode.com/gh_mirrors/un/UnityCsReference
你写了一个自定义EditorWindow,跑起来后老手一眼就说"这不像原生"。差距的根源就是 Unity 编辑器样式:字体、边距、按钮长相全都跟着样式对象走,而手搓的GUIStyle很容易做出"一眼假"。UnityCsReference 项目里就有现成答案——EditorStyles的内置样式,以及自己造样式的两条路线。
源码里现成的:内置样式按场景找
编辑器的标准长相集中在 EditorStyles.cs:这个类对外暴露了五十个静态GUIStyle属性,外加几个Font属性。不用全背,按场景找就行 🔍
- 文字展示:
EditorStyles.label普通文本,boldLabel强调文字,miniLabel小号辅助文字; - 按钮操作:
miniButton小按钮,toolbarButton工具栏按钮,iconButton纯图标按钮; - 表单输入:
textField输入框,popup下拉框,toggle复选框,foldout折叠组。
还有一组容易漏掉:inspectorDefaultMargins和inspectorFullWidthMargins不是控件样式,是边距规范——留白交给它们,间距就和 Inspector 对上了。
内置不够用:GUIStyle 直建 vs USS 样式表
内置覆盖不了需求时,有两条标准路线。
路线一:直接创建 GUIStyle。这是 Unity 自定义 GUIStyle 里最直接的写法:new GUIStyle(EditorStyles.label)起步,再改字体、边框、字色。IMGUI 小面板基本都这么干;代价是全手工,没有选择器和级联。
路线二:走 Unity USS 样式表。UIElements 的路线,样式写在.uss声明式文件里。源码里 AssetStoreWindow.cs 就是活例子:
var uss = EditorGUIUtility.Load( "StyleSheets/AssetStore/AssetStoreWindow.uss") as StyleSheet; rootStyleSheets.Add(uss);人话:把.uss文件读成StyleSheet,挂到 UIElements 根节点上,整个面板的外观一次配齐。
选型一句话:IMGUI 小面板走直建,UIElements 复杂界面走 USS。大多数编辑器扩展只用第一条就够了。
让样式跟着主题走
原生感的另一个细节 🎨:用户切换皮肤时,你的样式得跟着换。EditorGUIUtility.isProSkin就是开关——true是深色皮肤,false是浅色。源码里到处在用:
var label = new GUIStyle(EditorStyles.label); label.normal.textColor = EditorGUIUtility.isProSkin ? Color.white : Color.black;人话:isProSkin决定文字颜色,深色皮肤白字、浅色皮肤黑字,换哪种皮肤文字都不会"消失"。窗口留白则交给inspectorDefaultMargins这类边距样式,不同屏幕宽度都能自适应,不必手算像素。
落到实操:三个高频场景
- 属性面板提示区:
helpBox包一圈就是熟悉的灰色提示盒,里面再塞个miniButton,紧凑空间的操作按钮也有了。 - 原生工具栏:
toolbar做容器、上面排toolbarButton,出来的效果和 Unity 自带工具栏一致,不用自己调颜色。 - 搜索框:
toolbarSearchField一个就够——Project 窗口右上角那个圆角搜索框就是它。
上线前自查清单
合入前对四下:
- 别每帧建样式:
GUIStyle是UnityEngine.Object,在OnGUI里反复new很浪费,缓存到静态字段:
static GUIStyle s_WarnLabel; if (s_WarnLabel == null) s_WarnLabel = MakeWarnLabel();人话:只造一次,永远复用。
- 版本兼容:只用
EditorStyles的稳定公开属性,别碰s_Current、m_Label这类内部实现,跨版本可能改名或消失。 - 命名冲突:自定义样式加模块前缀,别用太泛的名字。
- 双皮肤检查:深色、浅色各跑一遍,确认文字不隐身、颜色不翻车。
收个尾 ✅
Unity 编辑器 UI 美化的基本功就是这些:内置的先从EditorStyles找,不够再走GUIStyle直建或 USS 样式表,上线前过一遍自查清单。下次开EditorWindow之前,先翻一遍EditorStyles.cs——你要的效果,多半已经在源码里了。
【免费下载链接】UnityCsReferenceUnity C# reference source code.项目地址: https://gitcode.com/gh_mirrors/un/UnityCsReference
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考