#if UNITY_EDITOR using UnityEngine; using UnityEditor; using System.Collections.Generic; namespace U3DExtends { static public class ContextMenu { static List mEntries = new List(); static GenericMenu mMenu; static public void AddItem(string item, bool isChecked, GenericMenu.MenuFunction callback) { if (callback != null) { if (mMenu == null) mMenu = new GenericMenu(); int count = 0; for (int i = 0; i < mEntries.Count; ++i) { string str = mEntries[i]; if (str == item) ++count; } mEntries.Add(item); if (count > 0) item += " [" + count + "]"; mMenu.AddItem(new GUIContent(item), isChecked, callback); } else AddDisabledItem(item); } static public void AddItemWithArge(string item, bool isChecked, GenericMenu.MenuFunction2 callback, object arge) { if (callback != null) { if (mMenu == null) mMenu = new GenericMenu(); int count = 0; for (int i = 0; i < mEntries.Count; ++i) { string str = mEntries[i]; if (str == item) ++count; } mEntries.Add(item); if (count > 0) item += " [" + count + "]"; mMenu.AddItem(new GUIContent(item), isChecked, callback, arge); } else AddDisabledItem(item); } static public void Show() { if (mMenu != null) { mMenu.ShowAsContext(); mMenu = null; mEntries.Clear(); } } //增加几种对齐菜单 static public void AddAlignMenu() { AddItem("对齐/左对齐 ←", false, AlignTool.AlignInHorziontalLeft); AddItem("对齐/右对齐 →", false, AlignTool.AlignInHorziontalRight); AddItem("对齐/上对齐 ↑", false, AlignTool.AlignInVerticalUp); AddItem("对齐/下对齐 ↓", false, AlignTool.AlignInVerticalDown); AddItem("对齐/水平均匀 |||", false, AlignTool.UniformDistributionInHorziontal); AddItem("对齐/垂直均匀 ☰", false, AlignTool.UniformDistributionInVertical); AddItem("对齐/一样大 ■", false, AlignTool.ResizeMax); AddItem("对齐/一样小 ●", false, AlignTool.ResizeMin); } //增加层次菜单 static public void AddPriorityMenu() { AddItem("层次/最里层 ↑↑↑", false, PriorityTool.MoveToTopWidget); AddItem("层次/最外层 ↓↓↓", false, PriorityTool.MoveToBottomWidget); AddItem("层次/往里挤 ↑", false, PriorityTool.MoveUpWidget); AddItem("层次/往外挤 ↓", false, PriorityTool.MoveDownWidget); } //增加UI控件菜单 static public void AddUIMenu() { AddItem("添加控件/Empty", false, UIEditorHelper.CreateEmptyObj); AddItem("添加控件/Image", false, UIEditorHelper.CreateImageObj); AddItem("添加控件/RawImage", false, UIEditorHelper.CreateRawImageObj); AddItem("添加控件/Button", false, UIEditorHelper.CreateButtonObj); AddItem("添加控件/Text", false, UIEditorHelper.CreateTextObj); AddItem("添加控件/AdaptiveText", false, UIEditorHelper.CreateAdaptiveTextObj); AddItem("添加控件/HScroll", false, UIEditorHelper.CreateHScrollViewObj); AddItem("添加控件/VScroll", false, UIEditorHelper.CreateVScrollViewObj); } //增加UI组件菜单 static public void AddUIComponentMenu() { AddItem("添加组件/Image", false, UIEditorHelper.AddImageComponent); //AddItem("添加组件/RawImage", false, UIEditorHelper.CreateRawImageObj); //AddItem("添加组件/Button", false, UIEditorHelper.CreateButtonObj); //AddItem("添加组件/Text", false, UIEditorHelper.CreateTextObj); AddItem("添加组件/HLayout", false, UIEditorHelper.AddHorizontalLayoutComponent); AddItem("添加组件/VLayout", false, UIEditorHelper.AddVerticalLayoutComponent); AddItem("添加组件/GridLayout", false, UIEditorHelper.AddGridLayoutGroupComponent); } //增加显示隐藏菜单 static public void AddShowOrHideMenu() { bool hasHideWidget = false; foreach (var item in Selection.gameObjects) { if (!item.activeSelf) { hasHideWidget = true; break; } } if (hasHideWidget) AddItem("显示", false, UILayoutTool.ShowAllSelectedWidgets); else AddItem("隐藏", false, UILayoutTool.HideAllSelectedWidgets); } static public void AddCommonItems(GameObject[] targets) { if (targets == null || targets.Length <= 0) { AddItem("新建", false, UIEditorHelper.CreatNewLayoutForMenu); AddItem("打开界面", false, UIEditorHelper.LoadLayout); AddItem("打开文件夹", false, UIEditorHelper.LoadLayoutWithFolder); } if (targets != null && targets.Length > 0) { AddItem("保存", false, UIEditorHelper.SaveLayoutForMenu); AddItem("打开界面", false, UIEditorHelper.LoadLayout); AddItem("另存为", false, UIEditorHelper.SaveAnotherLayoutContextMenu); AddItem("重新加载", false, UIEditorHelper.ReLoadLayoutForMenu); AddSeparator("///"); AddItem("复制选中控件名", false, UIEditorHelper.CopySelectWidgetName); //如果选中超过1个节点的话 if (targets.Length > 1) { AddAlignMenu(); AddItem("同流合污", false, UILayoutTool.MakeGroup); } AddSeparator("///"); if (targets.Length == 1) { AddUIMenu(); AddUIComponentMenu(); AddPriorityMenu(); if (UIEditorHelper.IsNodeCanDivide(targets[0])) AddItem("分道扬镖", false, UILayoutTool.UnGroup); Decorate uiBase = targets[0].GetComponent(); if (uiBase != null) { if (uiBase.gameObject.hideFlags == HideFlags.NotEditable) { AddItem("解锁", false, UIEditorHelper.UnLockWidget); } else { AddItem("锁定", false, UIEditorHelper.LockWidget); } } } AddShowOrHideMenu(); AddSeparator("///"); AddItem("添加参考图", false, UIEditorHelper.CreateDecorate); if (targets.Length == 1 && targets[0].transform.childCount > 0) AddItem("优化层级", false, UILayoutTool.OptimizeBatchForMenu); } AddItem("排序所有界面", false, UILayoutTool.ResortAllLayout); AddItem("清空界面", false, UIEditorHelper.ClearAllCanvas); } static public void AddSeparator(string path) { if (mMenu == null) mMenu = new GenericMenu(); if (Application.platform != RuntimePlatform.OSXEditor) mMenu.AddSeparator(path); } static public void AddDisabledItem(string item) { if (mMenu == null) mMenu = new GenericMenu(); mMenu.AddDisabledItem(new GUIContent(item)); } } } #endif