内置样式
using System.Collections.Generic;
using System.Reflection;
using UnityEditor;
using UnityEngine;
public class CustomEditor : EditorWindow
{
private enum Status
{
style, icon
}
static Status status;
#region EditorStyles 获取内部样式
private static List<GUIStyle> GUIStyles;
private Vector2 stylesScrollPosition = Vector2.zero;
[MenuItem("CustomTools/GetEditorStyles")]
private static void GetEditorStyles()
{
status = Status.style;
GUIStyles = new List<GUIStyle>();
GetWindow<CustomEditor>("EditorStyles 获取编辑器用到的样式并附加到Label上");
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++)
{
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 false
从具有给定名称的 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;
}
}
}