Unity 5.3 - 输入字段在按下时不会检测到第一个 "return" 键

Unity 5.3 - Input field wont detect first "return" key when pressed

我必须按两次 "return" 键才能提交值! 它在 2 小时前工作正常(我只需要按 return 一次),但后来我重新启动了 Unity,现在我需要双击 "return" 才能提交值。

更新 #2

我有一个附加到 canvas 的脚本,它包含输入字段。 代码如下:-

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
    }
    }

当我播放场景并在字段中键入并按第一个 return 时,日志不会显示任何内容,但当我再次按它时它显示 "Pressed"。

更新#3

我找到了某种解决方案,如果我删除 "inputField.isFocused" 输入字段将检测第一个 "Return" 键。 但是,在我的例子中,如果输入字段中有一些文本,然后用户单击场景中的其他任何地方,然后按回车键,输入字段将提交它。

请指教

无需手动执行此操作。您需要使用事件系统来注册和接收来自 InputField 的事件。使用 InputField.onEndEdit 注册 InputField 提交事件,以便在 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();
    }
}

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

就这么简单

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