MenuItemYIUIPanelSource.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using UnityEditor;
  2. using UnityEngine;
  3. namespace YIUIFramework.Editor
  4. {
  5. public static class MenuItemYIUIPanelSource
  6. {
  7. [MenuItem("Assets/YIUI/Create UIPanelSource", false, 0)]
  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.UISource} 下右键创建");
  14. return;
  15. }
  16. var path = AssetDatabase.GetAssetPath(Selection.activeObject);
  17. if (activeObject.name != YIUIConstHelper.Const.UISource ||
  18. !path.Contains(YIUIConstHelper.Const.UIProjectResPath))
  19. {
  20. UnityTipsHelper.ShowError($"请在路径 {YIUIConstHelper.Const.UIProjectResPath}/xxx/{YIUIConstHelper.Const.UISource} 下右键创建");
  21. return;
  22. }
  23. CreateYIUIPanelByPath(path);
  24. }
  25. internal static void CreateYIUIPanelByPath(string path, string name = null)
  26. {
  27. if (!path.Contains(YIUIConstHelper.Const.UIProjectResPath))
  28. {
  29. UnityTipsHelper.ShowError($"请在路径 {YIUIConstHelper.Const.UIProjectResPath}/xxx/{YIUIConstHelper.Const.UISource} 下右键创建");
  30. return;
  31. }
  32. var saveName = string.IsNullOrEmpty(name)
  33. ? YIUIConstHelper.Const.UIYIUIPanelSourceName
  34. : $"{name}{YIUIConstHelper.Const.UIPanelSourceName}";
  35. var savePath = $"{path}/{saveName}.prefab";
  36. if (AssetDatabase.LoadAssetAtPath(savePath, typeof(Object)) != null)
  37. {
  38. UnityTipsHelper.ShowError($"已存在 请先重命名 {saveName}");
  39. return;
  40. }
  41. var createPanel = CreateYIUIPanel();
  42. PrefabUtility.SaveAsPrefabAsset(createPanel, savePath);
  43. Object.DestroyImmediate(createPanel);
  44. UIMenuItemHelper.SelectAssetAtPath(savePath);
  45. }
  46. public static GameObject CreateYIUIPanel(GameObject activeObject = null)
  47. {
  48. //panel
  49. var panelObject = new GameObject();
  50. var panelRect = panelObject.GetOrAddComponent<RectTransform>();
  51. panelObject.GetOrAddComponent<CanvasRenderer>();
  52. var cdeTable = panelObject.GetOrAddComponent<UIBindCDETable>();
  53. cdeTable.UICodeType = EUICodeType.Panel;
  54. cdeTable.IsSplitData = true;
  55. cdeTable.PanelOption |= EPanelOption.TimeCache;
  56. var panelEditorData = cdeTable.PanelSplitData;
  57. panelEditorData.Panel = panelObject;
  58. panelObject.name = YIUIConstHelper.Const.UIYIUIPanelSourceName;
  59. if (activeObject != null)
  60. panelRect.SetParent(activeObject.transform, false);
  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. // 添加allView节点
  71. var allViewObject = new GameObject();
  72. var allViewRect = allViewObject.GetOrAddComponent<RectTransform>();
  73. allViewObject.name = YIUIConstHelper.Const.UIAllViewParentName;
  74. allViewRect.SetParent(panelRect, false);
  75. allViewRect.ResetToFullScreen();
  76. panelEditorData.AllViewParent = allViewRect;
  77. // 添加AllPopupView节点
  78. var allPopupViewObject = new GameObject();
  79. var allPopupViewRect = allPopupViewObject.GetOrAddComponent<RectTransform>();
  80. allPopupViewObject.name = YIUIConstHelper.Const.UIAllPopupViewParentName;
  81. allPopupViewRect.SetParent(panelRect, false);
  82. allPopupViewRect.ResetToFullScreen();
  83. panelEditorData.AllPopupViewParent = allPopupViewRect;
  84. panelObject.SetLayerRecursively(LayerMask.NameToLayer("UI"));
  85. return panelObject;
  86. }
  87. }
  88. }