zl程序教程

您现在的位置是:首页 >  工具

当前栏目

五、编辑器开发之GUIStyle

2023-06-13 09:11:38 时间

在编辑器开发中会大量用到GUIStyle,为了能够精确的实现想要的样式,将所有的样式列在一个窗口中进行预览,如下:

在窗口顶部的Search输入框中输入样式名称的关键字可进行筛选。

点击样式左侧的拷贝按钮可将样式名称进行复制。

创建脚本GUIStyle.cs 引入UnityEditor命名空间 继承EditorWindow类 实现我们的窗口类。

使用MenuItem创建一个菜单用来打开窗口。

下面为代码,需要放在Editor文件夹中:

using UnityEngine;
using UnityEditor;

namespace SK.Framework
{
    public sealed class GUIStyle : EditorWindow
    {
        [MenuItem("SKFramework/Editor/GUI/GUI Style")]
        private static void OpenGUIStyle()
        {
            GetWindow<GUIStyle>().Show();
        }

        private UnityEngine.GUIStyle[] styles;
        private Vector2 scroll = Vector2.zero;
        private string searchContent = "";

        private void OnGUI()
        {
            if (styles == null)
            {
                styles = GUI.skin.customStyles;
            }
            GUILayout.BeginHorizontal("Toolbar");
            {
                GUILayout.Label("Search:", GUILayout.Width(50));
                searchContent = GUILayout.TextField(searchContent, "SearchTextField");
            }
            GUILayout.EndHorizontal();

            scroll = GUILayout.BeginScrollView(scroll);
            {
                for (int i = 0; i < styles.Length; i++)
                {
                    if (styles[i].name.ToLower().Contains(searchContent.ToLower()))
                    {
                        GUILayout.BeginHorizontal("Badge");
                        {
                            if (GUILayout.Button("拷贝", "LargeButton", GUILayout.Width(40f)))
                            {
                                EditorGUIUtility.systemCopyBuffer = styles[i].name;
                                Debug.Log($"拷贝名称: {styles[i].name}");
                            }
                            EditorGUILayout.SelectableLabel(styles[i].name, GUILayout.Width((position.width - 40f) * 0.3f));
                            GUILayout.Button(string.Empty, styles[i], GUILayout.Width((position.width - 40f) * 0.6f));
                        }
                        GUILayout.EndHorizontal();
                    }
                }
            }
            GUILayout.EndScrollView();
        }
    }
}

在编辑器开发中可能还会大量用到Unity中内置的GUIIcon图标,内置图标的预览工具在后续文章中进行介绍。