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虛擬鍵盤激活狀態應該如何檢查了吧?
下期分享見~