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

我必须双按“返回”键才能提交值! 它工作得很好,就像2个小时前一样(我只需按回一次),但后来我重新启动了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 } } 

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

更新#3

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

请指教

无需手动执行此操作。 您需要使用事件系统来注册和接收来自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。