Я использую InputField в своем приложении для Android, чтобы получить строку, когда появляется мягкая клавиатура, когда я вхожу в строку, но теперь я хочу вызвать функцию, когда пользователь нажимает «done» ", как я могу это сделать?
Unity3d 4.6.2f1
Как обнаружить кнопку «done» в softkeyboard Unity3d
ответ
лучший способ я нашел это подкласс InputField. Вы можете посмотреть источник UnityUI на битбакет. В этом подклассе вы можете получить доступ к защищенному полю m_keyboard и проверить, было ли выполнено нажатие и не отменено, что даст вам желаемый результат. Использование «отправки» EventSystem не работает должным образом. Еще лучше, когда вы интегрируете его в Unity EventSystem.
Что-то вроде этого: SubmitInputField.cs
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;
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();
}
}
}
Editor/SubmitInputFieldEditor.cs
using UnityEngine;
using System.Collections;
using UnityEditor;
using UnityEngine.UI;
using UnityEditor.UI;
[CustomEditor (typeof(SubmitInputField), true)]
[CanEditMultipleObjects]
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();
}
}
Вы должны быть в состоянии достичь того же с помощью этого:
function Update() {
Event e = Event.currrent;
if (e.type == EventType.keyDown && e.keyCode == KeyCode.Return)
//Put in what you want here
}
что такое «e», и кто я могу получить к нему доступ? Я использую C# в unity3d –
'e' - ваша переменная для события. Вы можете использовать этот «Event e = Event.current;» –
, когда я использую ваш код, я получаю массовые исключения для нулевого указателя. но похож на ваш код, я использую 'Input.GetKeyDown (KeyCode.Return)', и теперь он работает в редакторе, но все еще не работает в Android-устройстве. –
выясню способ решить эту проблему я отправил свое решение. –