游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

项目源码

关注:1421

当前位置:游戏蛮牛 资源专区 项目源码

查看: 350|回复: 6

[Unity] 按键切换上下输入框

[复制链接]  [移动端链接]
6蛮牛粉丝
1033/1500
排名
2719
昨日变化
4

9

主题

153

帖子

1033

积分

Rank: 6Rank: 6Rank: 6

UID
252607
好友
5
蛮牛币
2888
威望
0
注册时间
2017-11-5
在线时间
379 小时
最后登录
2018-9-26
发表于 2018-6-20 19:03:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
    我们平时切换输入框时,在键盘上直接按Tab按键和Shift+Tab案件可以实现上下输入框的切换,很遗憾UGUI上并没有直接相应的操作,
最近刚好有点时间,于是自己写了这个功能与各位小伙伴交流交流。
   首先,创建三个输入框,并设置好Navigation并且加上EventTigger组件,然后将EventType中的Select和Diselect加上,
然后将下面的脚本分别挂载这三个输入框上:

[C#] 纯文本查看 复制代码
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using System.Collections.Generic;


/**************************************
 * 利用Tab键和 Shift+Tab键进行输入框的上下切换 
 * 将此脚本挂载到需要切换的输入框
 * **************************************/
public class TabFuction : MonoBehaviour
{

    public EventSystem system;          //手动拖入场景中的EventSystem
    private bool _select = false;

    private void Awake()
    {
        AddEventTriggersListener(gameObject, EventTriggerType.Select, OnSelect);          
        AddEventTriggersListener(gameObject, EventTriggerType.Deselect, OnDeselect);    
    }
    

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Tab) && _select)
        {
            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)
            {
                system.SetSelectedGameObject(next.gameObject, new BaseEventData(system));
            }
            else
            {
                Debug.LogWarning("找不到控件......");
            }
        }
    }

    public void OnSelect(BaseEventData eventData)
    {
        _select = true;     
    }

    public void OnDeselect(BaseEventData eventData)
    {
        _select = false;
    }

    private void AddEventTriggersListener(GameObject obj, EventTriggerType eventType, UnityAction<BaseEventData> action)
    {
        EventTrigger trigger = obj.GetComponent<EventTrigger>();
        if (trigger == null)
        {
            trigger = obj.AddComponent<EventTrigger>();
        }
        //实例化delegates  
        if (trigger.triggers.Count == 0)
        {
            trigger.triggers = new List<EventTrigger.Entry>();//    
        }

        EventTrigger.Entry entry = new EventTrigger.Entry();
        //设置事件类型    
        entry.eventID = eventType;
        //定义回调函数    
        UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(action);
        //设置回调函数    
        entry.callback.AddListener(callback);
        //添加事件触发记录到GameObject的事件触发组件    
        trigger.triggers.Add(entry);
    }

}


注意把脚本中的EventSystem赋值

然后就搞定了。

P.S.  在写这个的过程中出了一点问题,就是最开始在给EventTrigger中的Select和Diselect事件赋值的时候,我是从外部直接拖的,运行的时候就报错,不知道是为什么,Unity版本2017.4.2,




回复

使用道具 举报

7日久生情
2594/5000
排名
2728
昨日变化
16

0

主题

1764

帖子

2594

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
258739
好友
0
蛮牛币
5122
威望
0
注册时间
2017-12-9
在线时间
334 小时
最后登录
2018-9-26
发表于 2018-6-21 09:31:52 | 显示全部楼层
看起来很不错,感谢楼主分享!!!

回复 支持 反对

使用道具 举报

5熟悉之中
636/1000
排名
16088
昨日变化
10

0

主题

399

帖子

636

积分

Rank: 5Rank: 5

UID
199204
好友
0
蛮牛币
355
威望
0
注册时间
2017-1-5
在线时间
197 小时
最后登录
2018-9-20
发表于 2018-6-22 09:56:28 | 显示全部楼层
谢谢分享

回复

使用道具 举报

7日久生情
1752/5000
排名
1836
昨日变化

35

主题

247

帖子

1752

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
184458
好友
4
蛮牛币
9780
威望
0
注册时间
2016-11-17
在线时间
788 小时
最后登录
2018-9-26
发表于 2018-6-22 10:28:52 | 显示全部楼层
你这个只能垂直切换,水平的切换不了

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1033/1500
排名
2719
昨日变化
4

9

主题

153

帖子

1033

积分

Rank: 6Rank: 6Rank: 6

UID
252607
好友
5
蛮牛币
2888
威望
0
注册时间
2017-11-5
在线时间
379 小时
最后登录
2018-9-26
 楼主| 发表于 2018-6-22 12:02:11 | 显示全部楼层
无名_ 发表于 2018-6-22 10:28
你这个只能垂直切换,水平的切换不了

设置好输入框上Navigation属性,具体的可以看一下这个http://www.manew.com/thread-41046-1-1.html

回复 支持 反对

使用道具 举报

7日久生情
1752/5000
排名
1836
昨日变化

35

主题

247

帖子

1752

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
184458
好友
4
蛮牛币
9780
威望
0
注册时间
2016-11-17
在线时间
788 小时
最后登录
2018-9-26
发表于 2018-6-22 13:50:09 | 显示全部楼层
RyeCat 发表于 2018-6-22 12:02
设置好输入框上Navigation属性,具体的可以看一下这个http://www.manew.com/thread-41046-1-1.html ...

设置过了  垂直 水平 自动都试过 还是不可以

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1033/1500
排名
2719
昨日变化
4

9

主题

153

帖子

1033

积分

Rank: 6Rank: 6Rank: 6

UID
252607
好友
5
蛮牛币
2888
威望
0
注册时间
2017-11-5
在线时间
379 小时
最后登录
2018-9-26
 楼主| 发表于 2018-6-22 15:02:59 | 显示全部楼层
无名_ 发表于 2018-6-22 13:50
设置过了  垂直 水平 自动都试过 还是不可以

用最后一个 Explicit 试试,这个需要手动拖入 上下关系

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表