MenuItemYIUIPanel.cs 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using UnityEditor;
  2. using UnityEngine;
  3. namespace YIUIFramework.Editor
  4. {
  5. public static class MenuItemYIUIPanel
  6. {
  7. [MenuItem("Assets/YIUI/Create UIPanel", false, 1)]
  8. static void CreateYIUIPanelByFolder()
  9. {
  10. var activeObject = Selection.activeObject as DefaultAsset;
  11. if (activeObject == null)
  12. {
  13. UnityTipsHelper.ShowError($"请在路径 {YIUIConstHelper.Const.UIProjectResPath}/xxx/{YIUIConstHelper.Const.UIPrefabs} 下右键创建");
  14. return;
  15. }
  16. var path = AssetDatabase.GetAssetPath(Selection.activeObject);
  17. if (!path.Contains(YIUIConstHelper.Const.UIProjectResPath))
  18. {
  19. UnityTipsHelper.ShowError($"请在路径 {YIUIConstHelper.Const.UIProjectResPath}/xxx/{YIUIConstHelper.Const.UIPrefabs} 下右键创建");
  20. return;
  21. }
  22. CreateYIUIPanelByPath(path);
  23. }
  24. internal static void CreateYIUIPanelByPath(string path)
  25. {
  26. if (!path.Contains(YIUIConstHelper.Const.UIProjectResPath))
  27. {
  28. UnityTipsHelper.ShowError($"请在路径 {YIUIConstHelper.Const.UIProjectResPath}/xxx/{YIUIConstHelper.Const.UIPrefabs} 下右键创建");
  29. return;
  30. }
  31. var saveName = $"{YIUIConstHelper.Const.UIProjectName}{YIUIConstHelper.Const.UIPanelName}";
  32. var savePath = $"{path}/{saveName}.prefab";
  33. if (AssetDatabase.LoadAssetAtPath(savePath, typeof(Object)) != null)
  34. {
  35. UnityTipsHelper.ShowError($"已存在 请先重命名 {saveName}");
  36. return;
  37. }
  38. var createPanel = CreateYIUIPanel();
  39. PrefabUtility.SaveAsPrefabAsset(createPanel, savePath);
  40. Object.DestroyImmediate(createPanel);
  41. UIMenuItemHelper.SelectAssetAtPath(savePath);
  42. }
  43. private static GameObject CreateYIUIPanel(GameObject activeObject = null)
  44. {
  45. //panel
  46. var panelObject = new GameObject();
  47. var panelRect = panelObject.GetOrAddComponent<RectTransform>();
  48. panelObject.GetOrAddComponent<CanvasRenderer>();
  49. var cdeTable = panelObject.GetOrAddComponent<UIBindCDETable>();
  50. cdeTable.UICodeType = EUICodeType.Panel;
  51. cdeTable.IsSplitData = false;
  52. cdeTable.PanelOption |= EPanelOption.TimeCache;
  53. var panelEditorData = cdeTable.PanelSplitData;
  54. panelEditorData.Panel = panelObject;
  55. panelObject.name = $"{YIUIConstHelper.Const.UIProjectName}{YIUIConstHelper.Const.UIPanelName}";
  56. if (activeObject != null)
  57. {
  58. panelRect.SetParent(activeObject.transform, false);
  59. EditorUtility.SetDirty(activeObject);
  60. }
  61. panelRect.ResetToFullScreen();
  62. //阻挡图
  63. var backgroundObject = new GameObject();
  64. var backgroundRect = backgroundObject.GetOrAddComponent<RectTransform>();
  65. backgroundObject.GetOrAddComponent<CanvasRenderer>();
  66. backgroundObject.GetOrAddComponent<UIBlock>();
  67. backgroundObject.name = "UIBlockBG";
  68. backgroundRect.SetParent(panelRect, false);
  69. backgroundRect.ResetToFullScreen();
  70. panelObject.SetLayerRecursively(LayerMask.NameToLayer("UI"));
  71. return panelObject;
  72. }
  73. }
  74. }