InputField入力時にエンターキーで送信したいな〜
こんな要望にお応えします。
Unityの開発において、UIの操作性はユーザーエクスペリエンスに大きく影響します。
特に、テキスト入力を行う際に入力後に別のボタンをクリックする手間を省くことは、アプリケーションの使い勝手を大幅に向上させることができます。
今回は、UnityのInputFieldコンポーネントで、エンターキーを押すだけで特定の関数を実行する方法について解説します。
結論: onEndEditイベントの利用
結論、InputFieldのonEndEditを使えば達成できます。
UnityのInputFieldには、テキスト入力が終了した際に発生するイベントonEndEdit
があります。
このイベントを利用して、エンターキーが押されたときに特定の処理を実行することができます。
実装方法
以下の方法で実装できます。
- 必要なコンポーネントのインポート
- イベントリスナーのスクリプトの作成
以下で解説していきます。
Step1: 必要なコンポーネントのインポート
まずは、以下の必要な名前空間をインポートします。
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
Step2: イベントリスナーのスクリプトの作成
続いて、イベントリスナーを付与するスクリプトを作成します。
public class YourClass : MonoBehaviour
{
public InputField inputField;
void Start()
{
inputField.onEndEdit.AddListener(EnterPressed);
}
void OnDestroy()
{
inputField.onEndEdit.RemoveListener(EnterPressed);
}
private void EnterPressed(string text)
{
if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
{
// ここで任意の関数を呼び出します
YourFunction();
}
}
private void YourFunction()
{
// Enterキーが押された時に実行するコード
}
}
コード解説
以下でコードについて軽く解説します。
Startメソッド内
inputField
のonEndEdit
イベントにEnterPressed
メソッドをリスナーとして追加します。
これによりinputFieldへの入力が終了した際に、EnterPressedメソッドが実行されるようになります。
OnDestroyメソッド内
Start内でinputField
のonEndEdit
イベントに追加したEnterPressed
メソッドを削除します。
これを行わない場合、このスクリプトが付与されたオブジェクトが破棄された後にもonEndEditをリッスンするようになり、予期せぬ処理が行われバグなどに繋がります。
なので、イベントをリッスンした場合は必ずどこかのタイミングでリッスンを解除するようにしましょう。
エンターキーを押した場合の処理
if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
でエンターキーが押されたかを判定しています。
もし、true(エンターキーが押された)であれば、YourFunction
メソッドが呼び出されるようになっています。
まとめ
今回は、UnityのInputFieldでEnterキーを使って関数を実行する方法について解説しました。
この方法により、ユーザーはテキスト入力後に別のボタンを押す必要がなくなり、より良いユーザー体験を提供できるようになると思います。
ぜひ活用してみてください。