在Unity編輯器開(kāi)發(fā)時(shí),而GUI的各個(gè)組件基本上都有個(gè)GUIstyle的參數(shù)用于我們自定義不同的樣式。可以用skin中已有的一些樣式,如GUILayout.Label("label標(biāo)簽",GUI.skin.label);
,也可以自行創(chuàng)建一個(gè)skin使用自定義不同的樣式。
但是Unity自帶了各種自定義好的樣式,能滿足很多的應(yīng)用場(chǎng)景,但卻經(jīng)常被忽略。如圖。
GUIStyleView.png
這些style藏在GUI.skin.customStyles
中。寫(xiě)了個(gè)簡(jiǎn)單的工具方便查看和搜索這些樣式。效果圖如上圖,代碼:
using UnityEngine;
using UnityEditor;
public class GUIStyleViewer : EditorWindow
{
private Vector2 scrollVector2 = Vector2.zero;
private string search = "";
[MenuItem("UFramework/GUIStyle查看器")]
public static void InitWindow()
{
EditorWindow.GetWindow(typeof(GUIStyleViewer));
}
void OnGUI()
{
GUILayout.BeginHorizontal("HelpBox");
GUILayout.Space(30);
search = EditorGUILayout.TextField("", search, "SearchTextField", GUILayout.MaxWidth(position.x / 3));
GUILayout.Label("", "SearchCancelButtonEmpty");
GUILayout.EndHorizontal();
scrollVector2 = GUILayout.BeginScrollView(scrollVector2);
foreach (GUIStyle style in GUI.skin.customStyles)
{
if (style.name.ToLower().Contains(search.ToLower()))
{
DrawStyleItem(style);
}
}
GUILayout.EndScrollView();
}
void DrawStyleItem(GUIStyle style)
{
GUILayout.BeginHorizontal("box");
GUILayout.Space(40);
EditorGUILayout.SelectableLabel(style.name);
GUILayout.FlexibleSpace();
EditorGUILayout.SelectableLabel(style.name, style);
GUILayout.Space(40);
EditorGUILayout.SelectableLabel("", style, GUILayout.Height(40), GUILayout.Width(40));
GUILayout.Space(50);
if (GUILayout.Button("復(fù)制到剪貼板"))
{
TextEditor textEditor = new TextEditor();
textEditor.text = style.name;
textEditor.OnFocus();
textEditor.Copy();
}
GUILayout.EndHorizontal();
GUILayout.Space(10);
}
}
上面的搜索框,便是使用了"SearchTextField","SearchCancelButtonEmpty"兩個(gè)樣式。