2016-08-12 12 views
3

"return"キーを2回押して値を送信しなければなりません! 2時間前と同じようにうまくいきました(私は一度だけReturnキーを押す必要がありました)が、Unityを再起動しました。Unity 5.3 - 入力フィールドは、最初に "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キーを押すと入力フィールドが送信されます。

アドバイスをお願いします

+0

ユニティバージョンと入力ファイルの設定は何ですか?あなたが設定の写真を投稿すると良いでしょう。私は現在のものを削除して新しいものを作成し、それがあなたの問題を解決するかどうかを確認するアドバイスをします。 – Programmer

+0

質問を更新しました。 – Abzax

+0

あなたの問題があります。 Enterキーを何回か押す必要があります。あなたは一度それをしたいですか? – Programmer

答えて

3

これは手動で行う必要はありません。 InputFieldからイベントを登録して受信するには、イベントシステムを使用する必要があります。 InputFieldに登録してInputField.onEndEditでイベントを送信すると、InputFieldに投稿があるときにコールバックを取得できます。入力が変更されたときにはinputField.onValueChangedを使用して確認することもできます。あなたは、コールバック関数でnullチェックを実行することができます:ボタンを押すと、falseにinputField.isFocusedターンするため

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(); 
    } 
} 
+0

私は 'inputField.onEndEdit.AddListener(inputSubmitCallBack);と書いたでしょう'delegate {}'構造を使用しますか? – frankhermes

+2

@frankhermesこれは 'Button'(' Button.onClick.AddListener(inputSubmitCallBack); ')でうまくいくでしょう。 'InputField'イベントのためにはうまくいかないでしょう.'inputSubmitCallBack'はそれが動作するための文字列パラメータを持つ必要があります。試してみるとコンパイル時エラーが出ます。 'delegate'を使うと、Unityがあなたに電話して欲しいと思っているものを使うのではなく、パラメータを持っているかパラメータなしで任意の関数を呼び出すことができます。私は 'delegate'を使用して、多くの 'Buttons'で作業するときにできるだけ多くのパラメータを指定できるようにします。それは私に特別なIDとすべてのボタンのための1つのコールバック関数を使用することができます。 – Programmer

0

この問題に対する別の解決策は、前のフレームからinputField.isFocusedをチェックすることです。

関連する問題