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

Abz*_*zax 4 c# unity-game-engine unity5

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

更新 #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
    }
    }
Run Code Online (Sandbox Code Playgroud)

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

更新 #3

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

请指教

Pro*_*mer 5

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

  • @frankhermes 这适用于`Button`(`Button.onClick.AddListener(inputSubmitCallBack);`)。它不适用于 `InputField` 事件。`inputSubmitCallBack` 需要有字符串参数才能工作。如果您尝试,您将收到编译时错误。使用 `delegate` 你可以调用任何带参数或不带参数的函数,而不是使用 Unity 希望你调用的带参数的函数。我还使用了`delegate`,以便在使用多个“按钮”时可以指定尽可能多的参数。它允许我对所有 Buttons 使用特殊 ID 和只有一个回调函数。 (3认同)