MPEditorUtility.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Text;
  5. using UnityEditor;
  6. using UnityEditor.SceneManagement;
  7. using UnityEngine;
  8. using UnityEngine.UI;
  9. using Object = UnityEngine.Object;
  10. namespace MPUIKIT.Editor {
  11. public static class MPEditorUtility {
  12. [MenuItem("GameObject/UI/MPImage")]
  13. public static void AddMPImageObject() {
  14. GameObject g = new GameObject {name = "MPImage"};
  15. Transform parent = GetParentTransform();
  16. g.transform.SetParent(parent, false);
  17. g.AddComponent<MPImage>();
  18. Selection.activeGameObject = g;
  19. Undo.RegisterCreatedObjectUndo(g, "MPImage Created");
  20. EditorUtility.SetDirty(g);
  21. }
  22. [MenuItem("GameObject/UI/MPImage Basic")]
  23. public static void AddMPImageBasicObject() {
  24. GameObject g = new GameObject {name = "MPImageBasic"};
  25. Transform parent = GetParentTransform();
  26. g.transform.SetParent(parent, false);
  27. g.AddComponent<MPImageBasic>();
  28. Selection.activeGameObject = g;
  29. Undo.RegisterCreatedObjectUndo(g, "MPImage Basic Created");
  30. EditorUtility.SetDirty(g);
  31. }
  32. private static Transform GetParentTransform()
  33. {
  34. Transform parent;
  35. if (Selection.activeGameObject != null &&
  36. Selection.activeGameObject.GetComponentInParent<Canvas>() != null)
  37. {
  38. parent = Selection.activeGameObject.transform;
  39. }
  40. else
  41. {
  42. Canvas c = GetCanvas();
  43. AddAdditionalShaderChannelsToCanvas(c);
  44. parent = c.transform;
  45. }
  46. return parent;
  47. }
  48. private static Canvas GetCanvas()
  49. {
  50. StageHandle handle = StageUtility.GetCurrentStageHandle();
  51. if (!handle.FindComponentOfType<Canvas>())
  52. {
  53. EditorApplication.ExecuteMenuItem("GameObject/UI/Canvas");
  54. }
  55. Canvas c = handle.FindComponentOfType<Canvas>();
  56. return c;
  57. }
  58. [MenuItem("CONTEXT/Image/Replace with MPImage")]
  59. public static void ReplaceWithMPImage(MenuCommand command) {
  60. if(command.context is MPImage) return;
  61. if (command.context is MPImageBasic) {
  62. // Convert MPImageBasic to MPImage
  63. MPImageBasic img = (MPImageBasic) command.context;
  64. GameObject obj = img.gameObject;
  65. Object.DestroyImmediate(img);
  66. obj.AddComponent<MPImage>();
  67. EditorUtility.SetDirty(obj);
  68. }
  69. else {
  70. Image img = (Image) command.context;
  71. GameObject obj = img.gameObject;
  72. Object.DestroyImmediate(img);
  73. obj.AddComponent<MPImage>();
  74. EditorUtility.SetDirty(obj);
  75. }
  76. }
  77. [MenuItem("CONTEXT/Image/Replace with MPImage Basic")]
  78. public static void ReplaceWithMPImageBasic(MenuCommand command) {
  79. if(command.context is MPImageBasic) return;
  80. if (command.context is MPImage) {
  81. // Convert MPImage to MPImageBasic
  82. MPImage img = (MPImage) command.context;
  83. GameObject obj = img.gameObject;
  84. Object.DestroyImmediate(img);
  85. obj.AddComponent<MPImageBasic>();
  86. EditorUtility.SetDirty(obj);
  87. }
  88. else {
  89. Image img = (Image) command.context;
  90. GameObject obj = img.gameObject;
  91. Object.DestroyImmediate(img);
  92. obj.AddComponent<MPImageBasic>();
  93. EditorUtility.SetDirty(obj);
  94. }
  95. }
  96. internal static void AddAdditionalShaderChannelsToCanvas(Canvas c) {
  97. AdditionalCanvasShaderChannels additionalShaderChannels = c.additionalShaderChannels;
  98. additionalShaderChannels |= AdditionalCanvasShaderChannels.TexCoord1;
  99. additionalShaderChannels |= AdditionalCanvasShaderChannels.TexCoord2;
  100. c.additionalShaderChannels = additionalShaderChannels;
  101. }
  102. internal static bool HasAdditionalShaderChannels(Canvas c) {
  103. AdditionalCanvasShaderChannels asc = c.additionalShaderChannels;
  104. return (asc & AdditionalCanvasShaderChannels.TexCoord1) != 0 &&
  105. (asc & AdditionalCanvasShaderChannels.TexCoord2) != 0;
  106. }
  107. public static void CornerRadiusModeGUI(Rect rect, ref SerializedProperty property, string[] toolBarHeading,
  108. string label = "Corner Radius") {
  109. bool boolVal = property.boolValue;
  110. Rect labelRect = new Rect(rect.x, rect.y, EditorGUIUtility.labelWidth, rect.height);
  111. Rect toolBarRect = new Rect(rect.x + EditorGUIUtility.labelWidth, rect.y,
  112. rect.width - EditorGUIUtility.labelWidth, rect.height);
  113. EditorGUI.BeginChangeCheck();
  114. {
  115. EditorGUI.showMixedValue = property.hasMultipleDifferentValues;
  116. EditorGUI.LabelField(labelRect, label);
  117. boolVal = GUI.Toolbar(toolBarRect, boolVal ? 1 : 0, toolBarHeading) == 1;
  118. EditorGUI.showMixedValue = false;
  119. }
  120. if (EditorGUI.EndChangeCheck()) {
  121. property.boolValue = boolVal;
  122. }
  123. }
  124. private static Sprite _emptySprite;
  125. internal static Sprite EmptySprite {
  126. get {
  127. if (_emptySprite == null) {
  128. _emptySprite = Resources.Load<Sprite>("mpui_default_empty_sprite");
  129. }
  130. return _emptySprite;
  131. }
  132. }
  133. internal static string FindMPUIKitRootDirectory()
  134. {
  135. string guid = AssetDatabase.FindAssets("MPImage t:Shader").FirstOrDefault();
  136. string path = AssetDatabase.GUIDToAssetPath(guid);
  137. if(string.IsNullOrEmpty(path)) return String.Empty;
  138. string[] directories = path.Split(new[] {Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar});
  139. StringBuilder sb = new StringBuilder();
  140. for (int i = 0; i < directories.Length; i++)
  141. {
  142. sb.Append(directories[i]);
  143. sb.Append(Path.DirectorySeparatorChar);
  144. if(directories[i].Equals("MPUIKit", StringComparison.OrdinalIgnoreCase))
  145. break;
  146. }
  147. return sb.ToString();
  148. }
  149. }
  150. }