旧人旧梦旧时光
用Unity的UGUI创建的InputField输入框不能使用Tab健来实现切换这是在是让我感觉不太好,所以我就在网上寻找相应的方法,看到了一片文章,地址http://blo g.csdn.net/cyh1992899/article/details/52665103于是把代码copy试了一下,发现是可以用的 原博主用的是5.4版本的,我用的是5.5版本的,应该是都行。
ok那么以下就是具体的代码了,使用方法是,新建一个InputField输入框(可以多建几个可以测试效果),把InputField的Navigation属性设置为Automatic(很重要),把以上代码挂在InputField。
按Tab键进行切换,如果是在最后一个,那么可以同时按Shift+Tab切换到第一个的位置位置。
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class InputNavigator : MonoBehaviour, ISelectHandler, IDeselectHandler
{
EventSystem _system;
private bool _isSelect = false;
void Start()
{
_system = EventSystem.current;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Tab) && _isSelect)
{
Selectable next = null;
if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
{
next = _system.currentSelectedGameObject.GetComponent<Selectable>().FindSelectableOnUp();
}
else
{
next = _system.currentSelectedGameObject.GetComponent<Selectable>().FindSelectableOnDown();
}
if (next != null)
{
InputField inputfield = next.GetComponent<InputField>();
_system.SetSelectedGameObject(next.gameObject, new BaseEventData(_system));
}
else
{
//表示没有找到下一个控件(已经为最后一个)
}
}
}
public void OnSelect(BaseEventData eventData)
{
_isSelect = true;
}
public void OnDeselect(BaseEventData eventData)
{
_isSelect = false;
}
}