Unity编辑器:自定义编辑器样式——GUIStyle

本文详细介绍如何使用Unity中的GUIStyle来自定义编辑器界面样式,包括如何基于系统内置样式进行修改,以及提供了一个预览系统GUIStyle的工具代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过GUIStyle,可以自定义Unity编辑器的样式。

GUIStyle可以new一个全新的实例,这样,需要自己处理所有自己需要的效果。

GUIStyle还可以基于已经存在的实例new一个新的实例,这样,只需对原有的效果中不符合自己需求的进行修改。

就像这样:

GUIStyle textStyle = new GUIStyle("HeaderLabel");
textStyle.fontSize = 20;

一个基于 HeaderLabel  的字体显示风格,然后把字号放大成20;

然后就可以用这个风格来编制自己的编辑器,如下,文本“示例”二字会按上面定义的风格显示出来。

GUILayout.Label("示例", textStyle, GUILayout.Width(300));

Unity编辑器中,按钮,文本,开关等等大部分Layout都可以传入GUIStyle参数,就不多说了。

 

那么,到底怎么获得这些系统内置的样式的?

答案是:GUI.skin.customStyles !遍历这个数组,里面有大量的系统样式,稍作修改,基本就能有不错的效果啦。

下面,附上一个预览这些样式的方法。

首先,给出AssetStore上的资源地址:https://assetstore.unity.com/packages/tools/gui/editor-style-viewer-3282

源代码是js写的,不太习惯。我稍稍修改了一下,改成C#的了。

 

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 using UnityEditor;
 5 
 6 public class GUIStyleViewer : EditorWindow {
 7 
 8     Vector2 scrollPosition = new Vector2(0,0);
 9     string search = "";
10     GUIStyle textStyle;
11 
12 
13     private static GUIStyleViewer window;
14     [MenuItem("Tools/GUIStyleViewer", false, 100)]
15     private static void OpenStyleViewer()
16     {
17         window = GetWindow<GUIStyleViewer>(false, "查看内置GUIStyle");
18     }
19 
20     void OnGUI()
21     {
22         if (textStyle == null)
23         {
24             textStyle = new GUIStyle("HeaderLabel");
25             textStyle.fontSize = 20;
26         }
27 
28         GUILayout.BeginHorizontal("HelpBox");
29         GUILayout.Label("点击示例,可以将其名字复制下来", textStyle);
30         GUILayout.FlexibleSpace();
31         GUILayout.Label("Search:");
32         search = EditorGUILayout.TextField(search);
33         GUILayout.EndHorizontal();
34 
35         GUILayout.BeginHorizontal("PopupCurveSwatchBackground");
36         GUILayout.Label("示例", textStyle, GUILayout.Width(300));
37         GUILayout.Label("名字", textStyle, GUILayout.Width(300));
38         GUILayout.EndHorizontal();
39 
40 
41         scrollPosition = GUILayout.BeginScrollView(scrollPosition);
42 
43         foreach (var style in GUI.skin.customStyles)
44         {
45             if (style.name.ToLower().Contains(search.ToLower()))
46             {
47                 GUILayout.Space(15);
48                 GUILayout.BeginHorizontal("PopupCurveSwatchBackground");
49                 if (GUILayout.Button(style.name, style, GUILayout.Width(300)))
50                 {
51                     EditorGUIUtility.systemCopyBuffer = style.name ;
52                     Debug.LogError(style.name);
53                 }
54                 EditorGUILayout.SelectableLabel(style.name, GUILayout.Width(300));
55                 GUILayout.EndHorizontal();
56             }
57         }
58         
59         GUILayout.EndScrollView();
60     }
61 }
系统GUIStyle预览

 

效果如下:

 

转载于:https://www.cnblogs.com/yougoo/p/10073086.html

### 实现 Unity 编辑器顶部工具栏的自定义 为了在 Unity 编辑器中扩展顶部工具栏,可以利用 `ToolbarCallback` 接口来注册回调函数,在该函数内绘制所需的按钮或其他 GUI 组件[^1]。 #### 使用 ToolbarExtender 插件简化操作 通过安装并引入 MarijnZ 的 [Toolbar Extender](https://github.com/marijnz/unity-toolbar-extender) 插件,开发者能够更加便捷地向工具栏添加新项。此插件提供了一个简单的方法用于订阅工具栏更新事件,并允许动态修改其内容而不必担心内部细节处理。 ```csharp using UnityEngine; using UnityEditor; using Marijn.Extensions.Editor; public class CustomToolbarExample : MonoBehaviour { private static bool _initialized = false; [InitializeOnLoadMethod] public static void Initialize() { if (!_initialized) { ToolbarExtender.LeftToolbarGUI.Add(OnToolbarGUI); _initialized = true; } } private static void OnToolbarGUI() { GUILayout.Label("Custom Label", EditorStyles.toolbarButton); if (GUILayout.Button("Click Me!", EditorStyles.toolbarButton)) { Debug.Log("Button clicked!"); } } } ``` 这段代码展示了如何创建一个新的静态方法作为工具栏回调的一部分。当编辑器启动时会自动调用 `Initialize()` 方法完成初始化工作;而每当工具栏被重绘时都会触发 `OnToolbarGUI()` 函数执行具体的 UI 渲染逻辑。 对于样式定制方面,则可以通过设置不同的参数来自定义按钮外观以及布局方式。例如调整字体大小、颜色或是背景图片等属性均能借助于 `GUIStyle` 或者预设好的 `EditorStyles` 来轻松达成目标[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值