1. 常见问题:如果发现这个tab键按下时,跳转2个输入框,在project中,右键此脚本,选择Find References In Scene,肯定某一时刻同时有两个gameobject绑定了此脚本。
效果图如下:
要实现,选完“分类”下拉框内容后,按一下tab键,光标直接跳转单位名称一栏,
按到最下方“联系电话”一栏后,在从“分类”栏进行循环;按住左(或者右)shift,在按下tab键,光标进行向上跳转!
第一步:设置这些UI控件的navigation属性,原来的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!