Hello,大家好,我是Jimin 韩东吉,因为公司的项目在前一段时间处于紧急开发阶段和紧接着的一测二测,导致又是时隔很久不更,现在节奏稍微慢了下来,还是抽空回来继续更新吧。
今天给大家分享的一篇内容,很多时候我们会出现这样的一种需求,就是使用的UGUI的InputFiled组件,在进行文本输入时,需要在移动端检测是否虚拟键盘已经被激活了,举例如发送弹幕功能,剧情视频在播放的时候,策划想让程序暂停播放,然后进行打字输入弹幕发送,这就需要知道一点,什么时候算是虚拟键盘激活,什么时候算是虚拟键盘关闭?那怎么进行检测呢?有没有现成的api接口呢?
废话不多说,直接贴代码
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class TestInputFiled : MonoBehaviour
{
#region Public Attributes
public InputField m_input;
public Text m_text;
public Button m_btn;
#endregion
#region Private Attributes
private bool m_pop = false;
private bool m_fade = false;
#endregion
#region Unity Messages
void Start()
{
m_text.text = "";
m_btn.onClick.AddListener(() =>
{
m_text.text = "";
});
}
void Update()
{
if(m_input != null)
{
if (m_input.isFocused)
{
if(m_pop)
{
return;
}
m_pop = true;
m_fade = false;
OnEnterPopUp();
}
else
{
if(m_fade)
{
return;
}
m_pop = false;
m_fade = true;
OnFinish();
}
}
}
#endregion
#region Public Methods
public void OnEnterPopUp()
{
Debug.Log("Enter Pop Up");
m_text.text += "\n激活了手机端的输入显示";
}
public void OnFinish()
{
Debug.Log("Finish Barrage");
m_text.text += "\n结束了手机端的输入展示";
}
#endregion
#region Override Methods
#endregion
#region Private Methods
#endregion
#region Inner
#endregion
}
整个代码逻辑就是上面的了,主要的关键点就是通过InputField的isFocused来确定是否虚拟键盘已经激活了,然后通过不同的字段逻辑控制,来实现单一的激活和非激活状态的事件调用和派发。
现在回到Unity,正常情况下,当我们点击unity的inputfield时候,就可以进行输入了,那在手机端,表现则是虚拟键盘抬起。
我们先创建一个空场景后,进行组件挂载
然后运行游戏
根据上述逻辑,默认显示如上
当我们点击输入框的时候,就会按照逻辑提示处于激活状态,即虚拟键盘弹起状态,并且进行文本和日志的输出
当我们再次点击其他区域的时候,相当于取消焦点状态,即关闭虚拟键盘,这在手机端,相当于点击小键盘的取消,cancle,完成,ok,或者回车等触发事件。取消虚拟键盘显示。
其实,关键的关键就是isFocused这个字段,来确定是否处于焦点状态,即虚拟键盘激活状态。
好了,今天的分享就是这些,现在,大家应该知道InputField虚拟键盘激活状态应该如何检查了吧?
下期分享见~
本文分享自 韩东吉的Unity杂货铺 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!