Unity 框架

UnityIconsWindow.cs 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEditor;
  5. using System.Xml;
  6. using System.IO;
  7. using System.Reflection;
  8. namespace TFramework
  9. {
  10. public class UnityIconsWindow : EditorWindow
  11. {
  12. GUIStyle m_iconNameStyle;
  13. TextEditor m_te = new TextEditor();
  14. private const float width = 50;
  15. [MenuItem("TFramework/Tools/内置图标查询工具")]
  16. static void Init()
  17. {
  18. EditorWindow window = GetWindow<UnityIconsWindow>();
  19. window.maxSize = new Vector2(619, 616);
  20. window.minSize = new Vector2(619, 616);
  21. window.titleContent.text = "内置图标查询工具";
  22. window.titleContent.image = EditorGUIUtility.IconContent("Assembly Icon").image;
  23. window.Show();
  24. }
  25. List<Texture2D> builtInTexs = new List<Texture2D>();
  26. void GetBultinAsset()
  27. {
  28. var flags = BindingFlags.Static | BindingFlags.NonPublic;
  29. var info = typeof(EditorGUIUtility).GetMethod("GetEditorAssetBundle", flags);
  30. var bundle = info.Invoke(null, new object[0]) as AssetBundle;
  31. UnityEngine.Object[] objs = bundle.LoadAllAssets();
  32. if (null != objs)
  33. {
  34. for (int i = 0; i < objs.Length; i++)
  35. {
  36. if (objs[i] is Texture2D)
  37. {
  38. builtInTexs.Add(objs[i] as Texture2D);
  39. }
  40. }
  41. }
  42. }
  43. void OnEnable()
  44. {
  45. GetBultinAsset();
  46. m_iconNameStyle = new GUIStyle("WarningOverlay");
  47. m_iconNameStyle.fontSize = 12;
  48. }
  49. Vector2 scrollPos = Vector2.zero;
  50. void OnGUI()
  51. {
  52. EditorGUILayout.BeginVertical();
  53. scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
  54. int count = (int)Mathf.Floor(position.width / (width + 3));
  55. for (int i = 0; i < builtInTexs.Count; i += count)
  56. {
  57. EditorGUILayout.BeginHorizontal();
  58. for (int j = 0; j < count; j++)
  59. {
  60. int index = i + j;
  61. if (index < builtInTexs.Count)
  62. {
  63. EditorGUILayout.BeginVertical();
  64. if (GUILayout.Button(builtInTexs[index], GUILayout.Width(width), GUILayout.Height(width)))
  65. {
  66. m_te.text = $"EditorGUIUtility.IconContent(\"{builtInTexs[index].name}\").image";
  67. m_te.SelectAll();
  68. m_te.Copy();
  69. ShowNotification(new GUIContent($"已拷贝【{builtInTexs[index].name}】贴图代码"));
  70. }
  71. GUILayout.Label(builtInTexs[index].name, GUILayout.Width(width));
  72. EditorGUILayout.EndVertical();
  73. }
  74. }
  75. EditorGUILayout.EndHorizontal();
  76. }
  77. EditorGUILayout.EndScrollView();
  78. EditorGUILayout.EndVertical();
  79. }
  80. }
  81. }