今天做自己的游戏,有个功能,就是要玩家输入文字后,点击其他区域(输入框失焦,准确说是非选中状态)自动提交。这就需要监听到Input 输入框的失焦事件,然后回调自定义方法。尝试了半天,最后发现可以用onSelect() 实现。具体方式如下:
1,准备工作。新建一个Input Field 控件, 可以直接把NGUI的预制 Control - Simple Input Field 拖出来用。再新建一个空白的Gameobject(这里我命名为Callback_GameObject),用于接收Input Field产生的非选中状态的回调。如下图:
2,为需要监听的 Input Field 控件,加入监听器 Event Listener。具体为选中 Input Field,然后在Inspector中点击【Add Componet】,搜索Ev,找到Event Listener,添加。(当然也可以在Unity的菜单上选择【Component->NGUI->Internal ->Event Listener】进行添加)
3,编写事件触发后的回调脚本Test_Submit.cs,并把 Input Field 拖拽到source_obj上:
using UnityEngine;
using System.Collections;
public class Test_Submit : MonoBehaviour {
// 产生事件的游戏体(Input Field)
public GameObject source_obj;
// Use this for initialization
void Start () {
UIEventListener.Get(source_obj).onSelect = process_select_status;
}
// Update is called once per frame
void Update () {
}
void process_select_status(GameObject raw_obj, bool status) {
Debug.Log(raw_obj);
Debug.Log(status);
if (status) {
Debug.Log("+++++++++++++ On select! ");
}
else {
Debug.Log("------------- Out of focus!");
}
}
}
4,运行验证。首先点击输入框,会得到状态信息为【true】,点击输入框外面,非选中状态会得到状态【false】。
实际上,稍微改改逻辑,就能实现OnSubmit 的功能。