MenuItemYIUIView.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using UnityEditor;
  2. using UnityEngine;
  3. namespace YIUIFramework.Editor
  4. {
  5. public static class MenuItemYIUIView
  6. {
  7. [MenuItem("Assets/YIUI/Create UIView", false, 2)]
  8. static void CreateYIUIViewByFolder()
  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. var saveName = $"{YIUIConstHelper.Const.UIProjectName}{YIUIConstHelper.Const.UIViewName}";
  23. var savePath = $"{path}/{saveName}.prefab";
  24. if (AssetDatabase.LoadAssetAtPath(savePath, typeof(Object)) != null)
  25. {
  26. UnityTipsHelper.ShowError($"已存在 请先重命名 {saveName}");
  27. return;
  28. }
  29. var createView = CreateYIUIView();
  30. PrefabUtility.SaveAsPrefabAsset(createView, savePath);
  31. Object.DestroyImmediate(createView);
  32. UIMenuItemHelper.SelectAssetAtPath(savePath);
  33. }
  34. [MenuItem("GameObject/YIUI/Create UIView", false, 2)]
  35. static void CreateYIUIViewByGameObject()
  36. {
  37. var activeObject = Selection.activeObject as GameObject;
  38. if (activeObject == null)
  39. {
  40. UnityTipsHelper.ShowError($"请选择ViewParent 右键创建");
  41. return;
  42. }
  43. var panelCdeTable = activeObject.transform.parent.GetComponentInParent<UIBindCDETable>();
  44. if (panelCdeTable == null)
  45. {
  46. UnityTipsHelper.ShowError($"只能在AllViewParent / AllPopupViewParent 下使用 快捷创建View");
  47. return;
  48. }
  49. if (panelCdeTable.UICodeType != EUICodeType.Panel)
  50. {
  51. UnityTipsHelper.ShowError($"必须是Panel 下使用 快捷创建View");
  52. return;
  53. }
  54. var panelEditorData = panelCdeTable.PanelSplitData;
  55. if (activeObject != panelEditorData.AllViewParent?.gameObject &&
  56. activeObject != panelEditorData.AllPopupViewParent?.gameObject)
  57. {
  58. UnityTipsHelper.ShowError($"只能在AllViewParent / AllPopupViewParent 下使用 快捷创建View");
  59. return;
  60. }
  61. //ViewParent
  62. var viewParentObject = new GameObject();
  63. var viewParentRect = viewParentObject.GetOrAddComponent<RectTransform>();
  64. viewParentObject.name = YIUIConstHelper.Const.UIYIUIViewParentName;
  65. viewParentRect.SetParent(activeObject.transform, false);
  66. viewParentRect.ResetToFullScreen();
  67. //View
  68. var viewObject = CreateYIUIView(viewParentObject);
  69. var cdeTable = viewObject.GetOrAddComponent<UIBindCDETable>();
  70. if (activeObject == panelEditorData.AllViewParent.gameObject)
  71. {
  72. panelEditorData.AllCreateView.Add(viewParentRect);
  73. cdeTable.ViewWindowType = EViewWindowType.View;
  74. }
  75. else if (activeObject == panelEditorData.AllPopupViewParent.gameObject)
  76. {
  77. panelEditorData.AllPopupView.Add(viewParentRect);
  78. cdeTable.ViewWindowType = EViewWindowType.Popup;
  79. }
  80. viewParentObject.SetLayerRecursively(LayerMask.NameToLayer("UI"));
  81. Selection.activeObject = viewParentObject;
  82. }
  83. public static GameObject CreateYIUIView(GameObject activeObject = null)
  84. {
  85. var viewObject = new GameObject();
  86. viewObject.name = $"{YIUIConstHelper.Const.UIProjectName}{YIUIConstHelper.Const.UIViewName}";
  87. var viewRect = viewObject.GetOrAddComponent<RectTransform>();
  88. viewObject.GetOrAddComponent<CanvasRenderer>();
  89. var cdeTable = viewObject.GetOrAddComponent<UIBindCDETable>();
  90. cdeTable.UICodeType = EUICodeType.View;
  91. if (activeObject != null)
  92. {
  93. viewRect.SetParent(activeObject.transform, false);
  94. EditorUtility.SetDirty(activeObject);
  95. }
  96. viewRect.ResetToFullScreen();
  97. viewObject.SetLayerRecursively(LayerMask.NameToLayer("UI"));
  98. return viewObject;
  99. }
  100. }
  101. }