内置样式
using System.Collections.Generic;
using System.Reflection;
using UnityEditor;
using UnityEngine;
public class CustomEditor : EditorWindow
{
private enum Status
{
style, icon
}
static Status status;
#region
private static List<GUIStyle> GUIStyles; // 存储GUIStyle
private Vector2 stylesScrollPosition = Vector2.zero; // 滚动位置
[MenuItem("CustomTools/GetEditorStyles")]
private static void GetEditorStyles()
{
status = Status.style;
GUIStyles = new List<GUIStyle>();
GetWindow<CustomEditor>("EditorStyles 获取编辑器用到的样式并附加到Label上");
// 先反射获取 EditorStyles 下的所有样式,然后在窗口中依次绘制出来,BindingFlags 表示反射属性的类型
// BindingFlags.Static 与 BindingFlags.Instance 二者必须有一项或者都有
BindingFlags bindingFlags = BindingFlags.Static | BindingFlags.Public;
PropertyInfo[] propertyInfos = typeof(EditorStyles).GetProperties(bindingFlags);
foreach (PropertyInfo propertyInfo in propertyInfos)
{
GUIStyle gUIStyle = propertyInfo.GetValue(null, null) as GUIStyle;
if (gUIStyle != null) GUIStyles.Add(gUIStyle);
}
}
// 绘制样式
void DrawStyle()
{
stylesScrollPosition = GUILayout.BeginScrollView(stylesScrollPosition);
for (int i = 0; i < GUIStyles.Count; i++)
{
// 将样式附加到Label上
GUILayout.Label(GUIStyles[i].name, GUIStyles[i]);
}
GUILayout.EndScrollView();
}
#endregion
void OnGUI()
{
switch (status)
{
case Status.style: DrawStyle(); break;
}
}
}
内置图标
EditorGUIUtility.IconContent
从具有给定名称的 Unity 内置资源中获取 GUIContent
EditorGUIUtility.IconContent 用于为 GUI 元素创建 GUIContent。
只会加载图标.通常情况下
1. 第一个参数获取 Assets/Editor Default Resources/Icons 中的图标。只需要图标的名称,而不需要 png 扩展名。
2. 第二个参数为悬停工具提示提供文本。此字符串 需要以竖线“|”字符开头以将其标记为工具提示。
注意:目前无法悬停定位在工具提示上方。
using System.Collections.Generic;
using System.Reflection;
using UnityEditor;
using UnityEngine;
public class CustomEditor : EditorWindow
{
private enum Status
{
style, icon
}
static Status status;
#region
#if
从具有给定名称的 Unity 内置资源中获取 GUIContent
EditorGUIUtility.IconContent 用于为 GUI 元素创建 GUIContent。
只会加载图标.通常情况下
第一个参数获取 Assets/Editor Default Resources/Icons 中的图标。只需要图标的名称,而不需要 png 扩展名。
第二个参数为悬停工具提示提供文本。此字符串 需要以竖线“|”字符开头以将其标记为工具提示。
注意:目前无法悬停定位在工具提示上方。
#endif
private static List<GUIContent> icons;
[MenuItem("CustomTools/GetEditorIcons")]
private static void GetEditorIcons()
{
status = Status.icon;
icons = new List<GUIContent>();
GetWindow<CustomEditor>("图标");
Texture2D[] textures = Resources.FindObjectsOfTypeAll<Texture2D>();
foreach (Texture2D texture in textures)
{
GUIContent icon = EditorGUIUtility.IconContent(texture.name, $"|{texture.name}");
if (icon != null && icon.image != null) icons.Add(icon);
}
}
// 绘制图标
void DrawIcon()
{
for (int i = 0; i < icons.Count; i += 35)
{
GUILayout.BeginHorizontal();
for (int j = 0; j < 35; j++)
{
if(i + j < icons.Count)
GUILayout.Button(icons[i + j], GUILayout.Width(25), GUILayout.Height(25));
}
GUILayout.EndHorizontal();
}
}
#endregion
void OnGUI()
{
switch (status)
{
case Status.icon: DrawIcon(); break;
}
}
}