在编辑器开发中会大量用到GUIStyle,为了能够精确的实现想要的样式,将所有的样式列在一个窗口中进行预览,如下:
在窗口顶部的Search输入框中输入样式名称的关键字可进行筛选,
点击样式左侧的拷贝按钮可将样式名称进行复制。
下面为代码,需要放在Editor文件夹中
using UnityEngine;
using UnityEditor;
namespace SK.Framework
{
public sealed class GUIStyle : EditorWindow
{
[MenuItem("SKFramework/Editor/GUI/GUI Style")]
private static void OpenGUIStyle()
{
GetWindow().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();
}
}
}