SpriteUtilityWindow.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using AtlasUtility;
  7. using UnityEditor;
  8. using UnityEngine;
  9. public class SpriteUtilityWindow : EditorWindow
  10. {
  11. #region Config
  12. protected SpriteUtility Instance;
  13. protected SerializedProperty Path;
  14. protected SerializedProperty Name;
  15. protected SerializedProperty Sprite;
  16. protected SerializedObject SerializedObject;
  17. #endregion
  18. [MenuItem("DashGame/SpriteUtility")]
  19. protected static void ShowWindow()
  20. {
  21. Type inspectorType = Type.GetType("UnityEditor.InspectorWindow,UnityEditor.dll");
  22. SpriteUtilityWindow window = GetWindow<SpriteUtilityWindow>(inspectorType);
  23. window.titleContent = new GUIContent("SpriteUtility");
  24. window.Show();
  25. }
  26. private void OnEnable()
  27. {
  28. Instance = InstanceManager.SearchInstance<SpriteUtility>();
  29. SerializedObject = new SerializedObject(Instance);
  30. Path = SerializedObject.FindProperty("Path");
  31. Name = SerializedObject.FindProperty("Name");
  32. Sprite = SerializedObject.FindProperty("Sprite");
  33. }
  34. private void OnGUI()
  35. {
  36. SerializedObject.Update();
  37. EditorGUILayout.PropertyField(Sprite, new GUIContent("Sprite"));
  38. EditorGUILayout.BeginHorizontal();
  39. EditorGUILayout.PropertyField(Path, new GUIContent("Path"));
  40. if (GUILayout.Button("UseSelectedPath", GUILayout.MaxWidth(120)))
  41. {
  42. AtlasUtilityWindow.GetSelectedPath(ref Instance.Path);
  43. }
  44. EditorGUILayout.EndHorizontal();
  45. EditorGUILayout.BeginHorizontal();
  46. EditorGUILayout.PropertyField(Name, new GUIContent("Name"));
  47. if (GUILayout.Button("UseSelectedName", GUILayout.MaxWidth(120)))
  48. {
  49. AtlasUtilityWindow.GetSelectedName(ref Instance.Name);
  50. }
  51. EditorGUILayout.EndHorizontal();
  52. if (GUILayout.Button("Generate"))
  53. {
  54. Generate();
  55. }
  56. SerializedObject.ApplyModifiedProperties();
  57. }
  58. private void Generate()
  59. {
  60. if (Instance.Sprite == null)
  61. {
  62. throw new Exception("Sprite未赋值");
  63. }
  64. Mesh mesh = SpriteUtility.CreateMesh(Instance.Sprite);
  65. AssetDatabase.CreateAsset(mesh, GetFullPath());
  66. }
  67. private string GetFullPath()
  68. {
  69. string directory = Instance.Path.TrimEnd('/', '\\') + "/";
  70. if (directory.Length < 6 || directory.Substring(0, 6).ToLower() != "assets")
  71. {
  72. throw new Exception("Path必须位置Assets目录内");
  73. }
  74. if (!Directory.Exists(directory))
  75. {
  76. throw new Exception("文件夹不存在");
  77. }
  78. if (string.IsNullOrEmpty(Instance.Name) || Instance.Name.Any(System.IO.Path.GetInvalidFileNameChars().Contains))
  79. {
  80. throw new Exception("无效的名字");
  81. }
  82. string nameWithFormat = Instance.Name + ".asset";
  83. return directory + nameWithFormat;
  84. }
  85. }