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

       关于UGUI里下拉框这组件,着实把我弄惨了,UI控件想要完全用按键的方式去操作情况太过于复杂。

关于dropdown下拉菜单

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

关于eventSystem

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

参考解决方案

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

private ScrollRect scrollRect;
private Dropdown dropdown;

	if (dropdown.transform.Find("Dropdown List"))
        {
            scrollRect = dropdown.transform.Find("Dropdown List").GetComponent<ScrollRect>();
        }

       之后我们通过eventSystem事件去判断当前按键走到哪个组件。这块大伙可以先参考Unity的导航选项Navigation。
在这里插入图片描述

private EventSystem eventSystem;
void Start()
    {
        eventSystem = GetComponent<EventSystem>();
    }
// 下面的在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;
                }
            }
        }

       通过这种方式,能够很简单的控制滚动条,实际使用中,建议将坐标等位置创建空物体去获取,而不是写死坐标值。仅供大伙参考参考…

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值