0
点赞
收藏
分享

微信扫一扫

Unity(十九):获取编辑器内置样式和内置图标


内置样式

Unity(十九):获取编辑器内置样式和内置图标_游戏引擎

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;
}
}
}

内置图标

Unity(十九):获取编辑器内置样式和内置图标_c#_02

​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;
}
}
}


举报

相关推荐

0 条评论