Created
March 27, 2023 15:46
-
-
Save gustavopsantos/b2d552b7a16eb5c42094959e8183466f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// From Unity wiki: http://wiki.unity3d.com/index.php/Show_Built_In_Resources | |
using System; | |
using System.Collections.Generic; | |
using UnityEditor; | |
using UnityEngine; | |
public class BuiltInResourcesWindow : EditorWindow | |
{ | |
[MenuItem("Window/Built-in styles and icons")] | |
public static void ShowWindow() | |
{ | |
BuiltInResourcesWindow w = (BuiltInResourcesWindow) EditorWindow.GetWindow<BuiltInResourcesWindow>(); | |
w.Show(); | |
} | |
private struct Drawing | |
{ | |
public Rect Rect; | |
public Action Draw; | |
} | |
private List<Drawing> Drawings; | |
private List<UnityEngine.Object> _objects; | |
private float _scrollPos; | |
private float _maxY; | |
private Rect _oldPosition; | |
private bool _showingStyles = true; | |
private bool _showingIcons = false; | |
private string _search = ""; | |
void OnGUI() | |
{ | |
if (position.width != _oldPosition.width && Event.current.type == EventType.Layout) | |
{ | |
Drawings = null; | |
_oldPosition = position; | |
} | |
GUILayout.BeginHorizontal(); | |
if (GUILayout.Toggle(_showingStyles, "Styles", EditorStyles.toolbarButton) != _showingStyles) | |
{ | |
_showingStyles = !_showingStyles; | |
_showingIcons = !_showingStyles; | |
Drawings = null; | |
} | |
if (GUILayout.Toggle(_showingIcons, "Icons", EditorStyles.toolbarButton) != _showingIcons) | |
{ | |
_showingIcons = !_showingIcons; | |
_showingStyles = !_showingIcons; | |
Drawings = null; | |
} | |
GUILayout.EndHorizontal(); | |
string newSearch = GUILayout.TextField(_search); | |
if (newSearch != _search) | |
{ | |
_search = newSearch; | |
Drawings = null; | |
} | |
float top = 36; | |
if (Drawings == null) | |
{ | |
string lowerSearch = _search.ToLower(); | |
Drawings = new List<Drawing>(); | |
GUIContent inactiveText = new GUIContent("inactive"); | |
GUIContent activeText = new GUIContent("active"); | |
float x = 5.0f; | |
float y = 5.0f; | |
if (_showingStyles) | |
{ | |
foreach (GUIStyle ss in GUI.skin.customStyles) | |
{ | |
if (lowerSearch != "" && !ss.name.ToLower().Contains(lowerSearch)) | |
continue; | |
GUIStyle thisStyle = ss; | |
Drawing draw = new Drawing(); | |
float width = Mathf.Max( | |
100.0f, | |
GUI.skin.button.CalcSize(new GUIContent(ss.name)).x, | |
ss.CalcSize(inactiveText).x + ss.CalcSize(activeText).x | |
) + 16.0f; | |
float height = 60.0f; | |
if (x + width > position.width - 32 && x > 5.0f) | |
{ | |
x = 5.0f; | |
y += height + 10.0f; | |
} | |
draw.Rect = new Rect(x, y, width, height); | |
width -= 8.0f; | |
draw.Draw = () => | |
{ | |
if (GUILayout.Button(thisStyle.name, GUILayout.Width(width))) | |
CopyText("(GUIStyle)\"" + thisStyle.name + "\""); | |
GUILayout.BeginHorizontal(); | |
GUILayout.Toggle(false, inactiveText, thisStyle, GUILayout.Width(width / 2)); | |
GUILayout.Toggle(false, activeText, thisStyle, GUILayout.Width(width / 2)); | |
GUILayout.EndHorizontal(); | |
}; | |
x += width + 18.0f; | |
Drawings.Add(draw); | |
} | |
} | |
else if (_showingIcons) | |
{ | |
if (_objects == null) | |
{ | |
_objects = new List<UnityEngine.Object>(Resources.FindObjectsOfTypeAll(typeof(Texture2D))); | |
_objects.Sort((pA, pB) => | |
System.String.Compare(pA.name, pB.name, System.StringComparison.OrdinalIgnoreCase)); | |
} | |
float rowHeight = 0.0f; | |
foreach (UnityEngine.Object oo in _objects) | |
{ | |
Texture2D texture = (Texture2D) oo; | |
if (texture.name == "") | |
continue; | |
if (lowerSearch != "" && !texture.name.ToLower().Contains(lowerSearch)) | |
continue; | |
Drawing draw = new Drawing(); | |
float width = Mathf.Max( | |
GUI.skin.button.CalcSize(new GUIContent(texture.name)).x, | |
texture.width | |
) + 8.0f; | |
float height = texture.height + GUI.skin.button.CalcSize(new GUIContent(texture.name)).y + 8.0f; | |
if (x + width > position.width - 32.0f) | |
{ | |
x = 5.0f; | |
y += rowHeight + 8.0f; | |
rowHeight = 0.0f; | |
} | |
draw.Rect = new Rect(x, y, width, height); | |
rowHeight = Mathf.Max(rowHeight, height); | |
width -= 8.0f; | |
draw.Draw = () => | |
{ | |
if (GUILayout.Button(texture.name, GUILayout.Width(width))) | |
CopyText("EditorGUIUtility.FindTexture( \"" + texture.name + "\" )"); | |
Rect textureRect = GUILayoutUtility.GetRect(texture.width, texture.width, texture.height, | |
texture.height, GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(false)); | |
EditorGUI.DrawTextureTransparent(textureRect, texture); | |
}; | |
x += width + 8.0f; | |
Drawings.Add(draw); | |
} | |
} | |
_maxY = y; | |
} | |
Rect r = position; | |
r.y = top; | |
r.height -= r.y; | |
r.x = r.width - 16; | |
r.width = 16; | |
float areaHeight = position.height - top; | |
_scrollPos = GUI.VerticalScrollbar(r, _scrollPos, areaHeight, 0.0f, _maxY); | |
Rect area = new Rect(0, top, position.width - 16.0f, areaHeight); | |
GUILayout.BeginArea(area); | |
int count = 0; | |
foreach (Drawing draw in Drawings) | |
{ | |
Rect newRect = draw.Rect; | |
newRect.y -= _scrollPos; | |
if (newRect.y + newRect.height > 0 && newRect.y < areaHeight) | |
{ | |
GUILayout.BeginArea(newRect, GUI.skin.textField); | |
draw.Draw(); | |
GUILayout.EndArea(); | |
count++; | |
} | |
} | |
GUILayout.EndArea(); | |
} | |
void CopyText(string pText) | |
{ | |
TextEditor editor = new TextEditor(); | |
editor.content = new GUIContent(pText); | |
editor.SelectAll(); | |
editor.Copy(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment