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上完美监听回车事件。
好了就到这里,再见吧!

猜你喜欢

转载自blog.csdn.net/tj134679258/article/details/51638206