在编辑器开发中会大量用到GUIStyle,为了能够精确的实现想要的样式,将所有的样式列在一个窗口中进行预览,如下:
在窗口顶部的Search输入框中输入样式名称的关键字可进行筛选。
点击样式左侧的拷贝按钮可将样式名称进行复制。
创建脚本GUIStyle.cs 引入UnityEditor命名空间 继承EditorWindow类 实现我们的窗口类。
使用MenuItem创建一个菜单用来打开窗口。
下面为代码,需要放在Editor文件夹中:
代码语言:javascript复制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图标,内置图标的预览工具在后续文章中进行介绍。