Unity自带的Dropdown只能出现一级下拉菜单 在尝试修改之后 无法实现 索性自己写了一个
效果如下
组件结构
主按钮 MainButton 点击之后出现菜单
菜单 dropdownpanel 放置多个按钮Item
菜单列表 dropdown列表 放置多个菜单
按钮Item dropdownItem模板 每个菜单按钮的模板
获取dropdownItem模板大小 本想自动适配大小 后来没有用
背景按钮隐藏 一个巨大的下层Mask 用于点击外部关闭整个菜单
代码
界面部分
1 public class MoreDropdown : MonoBehaviour 2 { 3 [Header("主按钮")] 4 public Button mainButton; 5 [Header("dropdownPanel模板")] 6 public Image dropdownPanel; 7 [Header("dropdown列表")] 8 public Image dropdownGrid; 9 [Header("dropdownItem模板")] 10 public Button dropdownItem; 11 [Header("获取dropdownItem模板大小")] 12 public RectTransform dropdownItemRT; 13 [Header("背景按钮隐藏")] 14 public Button hideBG; 15 //下拉菜单集 16 private List<Image> dropdownPanels = new List<Image>(); 17 //菜单数据 18 private static List<IMoreDropdownInfo> allInfo; 19 //记录点击位置顺序 20 private int[] clickOrder = new int[10]; 21 private int orderIndex = 0; 22 //是否显示 23 private bool isShowFirstPanel = true; 24 //选中按钮 25 private List<Button> pointerButtonList = new List<Button>(); 26 //当前选中按钮数据 27 private Button enterButton; 28 private int enterButtonLevel; 29 private IMoreDropdownInfo enterButtonInfo; 30 //按钮选中颜色状态 31 private enum ButtonColorState 32 { 33 Normal, 34 Enter, 35 Exit, 36 Click, 37 } 38 //多下拉菜单辅助Action 39 public Action onCreateDropdown; 40 41 void Awake() 42 { 43 //下拉菜单 44 mainButton.onClick.AddListener(delegate () 45 { 46 if (isShowFirstPanel) 47 { 48 isShowFirstPanel = false; 49 hideBG.gameObject.SetActive(true); 50 //置于顶部 51 transform.SetAsLastSibling(); 52 //开始创建列表 53 onCreateDropdown?.Invoke(); 54 CreateDropdown(0, allInfo); 55 } 56