天天看點

Unity社交功能開發——移動端輸入法回車事件響應一、叙叙舊二、回車事件三、Unity中的虛拟鍵盤四、上代碼五、注意

一、叙叙舊

最近工作比較忙好久沒有更新部落格了,筆者并沒有忘記部落格也沒有忘記大家。遊戲大概下月初就上線了,我會逐漸把做過的研究過的事情都分享出來。

二、回車事件

今天就先分享下Unity遊戲輸入法在移動端的回車事件如何捕獲。大家在用Unity開發聊天子產品的時候,都會發現一件事情,為什麼别家的遊戲或者應用可以輸入完之後點一下回車按鍵就能發送,而Unity的輸入框不行。其實Unity也是勉強可以的,今天筆者就把Unity回車事件捕獲的代碼分享給大家。

三、Unity中的虛拟鍵盤

unity中的虛拟鍵盤是通過TouchScreenKeyboard這個類提供的接口UGUI、NGUI同理,如果非常精通移動端開發的同學可以試試能不能自己寫一個軟體盤,筆者時間緊任務重隻能通過Unity給的接口下手,是以我們需要運用虛拟鍵盤這個類實作捕獲移動端的回車事件。

四、上代碼

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine.Events;
using System;
using UnityEngine.EventSystems;
using UnityEngine.Serialization;
//筆者通過內建InputField,在update中監聽軟體盤的狀态捕獲到回車事件
public class SubmitInputField : InputField
{
    [Serializable]
    public class KeyboardDoneEvent : UnityEvent { }

    [SerializeField]
    private KeyboardDoneEvent m_keyboardDone = new KeyboardDoneEvent();

    public KeyboardDoneEvent onKeyboardDone
    {
        get { return m_keyboardDone; }
        set { m_keyboardDone = value; }
    }

    void Update()
    {
        if (m_Keyboard != null && m_Keyboard.done && !m_Keyboard.wasCanceled)
        {
            m_keyboardDone.Invoke();
        }
    }
}
           
using UnityEngine;
using System.Collections;
using UnityEditor;
using UnityEngine.UI;
using UnityEditor.UI;

[CustomEditor(typeof(SubmitInputField), true)]
[CanEditMultipleObjects]
//這段代碼要放在Unity的Editor目錄下
public class SubmitInputFieldEditor : InputFieldEditor
{
    SerializedProperty m_KeyboardDoneProperty;
    SerializedProperty m_TextComponent;

    protected override void OnEnable()
    {
        base.OnEnable();
        m_KeyboardDoneProperty = serializedObject.FindProperty("m_keyboardDone");
        m_TextComponent = serializedObject.FindProperty("m_TextComponent");
    }


    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        EditorGUI.BeginDisabledGroup(m_TextComponent == null || m_TextComponent.objectReferenceValue == null);

        EditorGUILayout.Space();

        serializedObject.Update();
        EditorGUILayout.PropertyField(m_KeyboardDoneProperty);
        serializedObject.ApplyModifiedProperties();

        EditorGUI.EndDisabledGroup();
        serializedObject.ApplyModifiedProperties();
    }
}
           

五、注意

筆者提供的方法隻能在IOS上完美實作,在Android上接口類似于OnEndEdit

筆者比對了很多大廠做出來的遊戲《全民超神》、《王者榮耀》、《六龍争霸》等,他們的實作方法隻是運用的OnEndEdit,筆者的方法可以在IOS上完美監聽回車事件。

好了就到這裡,再見吧!

繼續閱讀