Unity 5.3 - 输入字段在按下时不会检测到第一个“返回”键

时间:2016-08-12 02:15:12

标签: c# unity3d unity5

我必须双按“return”键才能提交值! 它工作得很好,就像2个小时前一样(我只需按回一次),但后来我重新启动了Unity,现在我需要双击“return”来提交值。

更新#2

我有一个脚本附加到持有输入字段的画布上。 代码如下: -

public class Example: MonoBehaviour {
    public InputField inputField; 

    void Start () {
    }

    void Update () {
    HandleUserInput ();
    }

    void HandleUserInput() 
    {

    if (inputField.isFocused && inputField.text != "" && (Input.GetKey (KeyCode.Return) || Input.GetKey(KeyCode.KeypadEnter))) {
        Debug.Log ("Pressed");
        //Do stuff
        inputField.text = ""; //Clear Inputfield text
        inputField.ActivateInputField(); //Re-focus on the input field
        inputField.Select ();//Re-focus on the input field
    }
    }

当我播放场景并输入字段并按下第一个返回时,日志不会显示任何内容,但是当我再次按下它时会显示“已按下”。

更新#3

如果我删除,我找到了某种解决方案     “inputField.isFocused” 输入字段将检测第一个“返回”键。 但是,在我的情况下,如果输入字段中有一些文本,那么用户点击场景中的任何其他位置然后按Enter键,输入字段将提交它。

请咨询

3 个答案:

答案 0 :(得分:4)

无需手动执行此操作。您需要使用事件系统来注册和接收来自InputField的事件。注册InputFieldInputField.onEndEdit提交活动,以便在InputField提交时收到回电。您还可以使用inputField.onValueChanged检查输入何时更改。您可以在回调函数中执行null检查:

public class Example: MonoBehaviour
{
    public InputField inputField;
    void Start()
    {
    }

    void Update()
    {
    }

    //Called when Input changes
    private void inputSubmitCallBack()
    {
        Debug.Log("Input Submitted");
        inputField.text = ""; //Clear Inputfield text
        inputField.ActivateInputField(); //Re-focus on the input field
        inputField.Select();//Re-focus on the input field
    }

    //Called when Input is submitted
    private void inputChangedCallBack()
    {
        Debug.Log("Input Changed");
    }

    void OnEnable()
    {
        //Register InputField Events
        inputField.onEndEdit.AddListener(delegate { inputSubmitCallBack(); });
        inputField.onValueChanged.AddListener(delegate { inputChangedCallBack(); });
    }

    void OnDisable()
    {
        //Un-Register InputField Events
        inputField.onEndEdit.RemoveAllListeners();
        inputField.onValueChanged.RemoveAllListeners();
    }
}

答案 1 :(得分:1)

就这么简单

void Update()
    {
        if (Input.GetKeyUp(KeyCode.Return)) { YourSubmitFunction(); }
    }

答案 2 :(得分:0)

此问题的另一个解决方案是检查上一帧中的inputField.isFocused,因为按下该按钮会使inputField.isFocused变为false。