Unity 多级下拉菜单

本文介绍了如何在Unity中实现多级下拉菜单,由于Unity默认Dropdown仅支持一级菜单,作者选择自己编写组件。组件包含MainButton、dropdownPanel、dropdown列表和dropdownItem模板等部分,并提供了代码示例和数据处理流程,包括Lua层的数据处理。文章还分享了预设资源链接。

 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                 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值