Unity3D 使用“Shift+Tab”和“Tab”键 上下切换 UGUI下 Dropdown和inputfield等控件的控制顺序

来源:互联网 发布:淘宝卖假货被公安抓了 编辑:程序博客网 时间:2024/05/22 00:49

1. 常见问题:如果发现这个tab键按下时,跳转2个输入框,在project中,右键此脚本,选择Find References In Scene,肯定某一时刻同时有两个gameobject绑定了此脚本。

效果图如下:
要实现,选完“分类”下拉框内容后,按一下tab键,光标直接跳转单位名称一栏,
按到最下方“联系电话”一栏后,在从“分类”栏进行循环;按住左(或者右)shift,在按下tab键,光标进行向上跳转!
这里写图片描述
第一步:设置这些UI控件的navigation属性,原来的Automatic改成Explicit,如图:
原来的Automatic改成Explicit
第二步:进行如下设置
这里写图片描述
第三步:这些UI控件,选其一绑定如下脚本
这里写图片描述

using UnityEngine;using UnityEngine.UI;using UnityEngine.EventSystems;/// <summary>///2017年3月31日10:30:19/// 阿祥 unity 5.3.6///Unity3D 使用“Shift+Tab”和“Tab”键 上下切换 panel下 Dropdown和inputfield等控件的控制顺序/// </summary>public class InputNavigator : MonoBehaviour, ISelectHandler, IDeselectHandler{    EventSystem system;    private bool _isSelect = false;    private bool isGetOneMessage=false;    void Start()    {        system = EventSystem.current;    }    void Update()    {        #region        //监测Tab按下,此时应该选择下一个UI控件        if (Input.GetKeyDown(KeyCode.Tab))        {            Selectable next = null;//下一个ui控件            Selectable current = null;//当前的ui控件            //验证当前是否有正在选中的物体            if (system.currentSelectedGameObject != null)            {   //验证当前选中的物体在层次列表里是否可用                if (system.currentSelectedGameObject.activeInHierarchy)                {                    current = system.currentSelectedGameObject.GetComponent<Selectable>();                }            }            if (current != null)            {                //当左(右)shift被按住,并且伴随着,点击tab键,光标依次向上移动                if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))                {                    next = current.FindSelectableOnUp();                    if (next == null)                    {                        next = current.FindSelectableOnLeft();                    }                }                else                {                    next = current.FindSelectableOnDown();                    if (next == null)                    {                        next = current.FindSelectableOnRight();                    }                }            }            else            {                //如果没有 “当前正在选择的物体”,那么选择第一个可选项                if (Selectable.allSelectables.Count > 0)                {                    next = Selectable.allSelectables[0];                }            }            if (next != null)            {                next.Select();            }        }        #endregion    }    public void OnSelect(BaseEventData eventData)    {        _isSelect = true;    }    public void OnDeselect(BaseEventData eventData)    {        _isSelect = false;    }}

over!

2 0
原创粉丝点击