请选择 进入手机版 | 继续访问电脑版

unity dropdown下拉框下拉菜单关于按键控制滚动条的方法

[复制链接]
林雨宣 发表于 2021-1-1 18:31:12 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
       关于UGUI里下拉框这组件,着实把我弄惨了,UI控件想要完全用按键的方式去操作情况太过于复杂。
关于dropdown下拉菜单

       一般大伙的需求都是用鼠标去选择选项和拖动滚动条,但是对于各种需求而言,大概也会出现使用键盘操作的情况。坑爹的地方来了,dropdown生成下拉菜单的时候是将控件下的template重新实例化出来,相当于复制,更坑的是模版只有在点击选项的时候才会生成,选择了子选项后就会销毁。在实际的键盘操作中,想获取其滚动条可有点难受,一不注意就会报空指针,所以我们得按需获取组件。
关于eventSystem

       既然是按键控制,所以我们得先获取当前按键走到了什么位置,在由此判定滚动条是否应该跟随滚动。滚动条主要适用于下拉选单的选项许多的时候。
参考解决方案

       首先我们需要判定何时获取控制滚动条,运行的时候,未点击按钮时,不能去获取,否则会空指针异常。也就是,当dropdown执行show()的时候去获取。这里我直接用if判定了。注意,首先确定dropdown会生成什么样的组件名。


  1. private ScrollRect scrollRect;private Dropdown dropdown;        if (dropdown.transform.Find("Dropdown List"))        {            scrollRect = dropdown.transform.Find("Dropdown List").GetComponent();        }
复制代码
       之后我们通过eventSystem事件去判定当前按键走到哪个组件。这块大伙可以先参考Unity的导航选项Navigation。

  1. private EventSystem eventSystem;void Start()    {        eventSystem = GetComponent();    }// 下面的在update里每帧检测        // currentSelectedGameObject获取当前按键所在的物体        // 确定在什么位置时需要滚动条跟随    if (eventSystem.currentSelectedGameObject.transform.position.y < 124.8f)        {            if (Input.GetKeyDown(KeyCode.S))            {                    // 获取模版的scrollRect就能直接操作滚动条了                    // 水平照旧垂直看个人,发起查阅api                scrollRect.verticalNormalizedPosition -= 0.3f;                if (scrollRect.verticalNormalizedPosition < 0.2f)                {                    scrollRect.verticalNormalizedPosition = 0;                }            }        }
复制代码
       通过这种方式,能够很简朴的控制滚动条,实际使用中,发起将坐标等位置创建空物体去获取,而不是写死坐标值。仅供大伙参考参考…

来源:https://blog.csdn.net/weixin_43910915/article/details/112008622
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )