Unity 多级下拉菜单

Unity自带的Dropdown只能出现一级下拉菜单 在尝试修改之后 无法实现 索性自己写了一个效果如下组件结构主按钮 MainButton 点击之后出现菜单菜单 dropdownpanel 放置多个按钮Item菜单列表 dropdown列表 放置多个菜单按钮Item dropdownItem模板 每个菜单按钮的模板获取dropdownItem模板大...
摘要由CSDN通过智能技术生成

 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       
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值