はじめに
今回はInputFieldで入力の編集が終わったときにメソッドを呼ぶ方法についての記事になります!
実際のイメージはこんな感じ。
早速みていきましょう。
方法1「インスペクターから設定する」
一番簡単な方法はインスペクターから設定することでしょう。
まずは適当なInputField
のゲームオブジェクトを作成し、インスペクターを見てみてください。
このOn End Edit
という箇所にメソッドを登録することで入力の編集後にメソッドを実行することができます。
今回用いたスクリプトは以下の通りで、任意のゲームオブジェクトにアタッチをすることで選択することができるようになります。
using UnityEngine; using UnityEngine.UI; public class InputFieldTest : MonoBehaviour { [SerializeField] private InputField _inputField; [SerializeField] private Text _text; public void UpdateText() { _text.text = _inputField.text; } }
メソッドのアクセス修飾子はpublic
でないとインスペクターから参照できない事に注意してください。
またOn End Edit
の上にあるOn Value Changed
は、値が変化した時にメソッドが毎回呼ばれるものになります。
方法2「スクリプトから設定する」
次はスクリプトから設定する方法についてみてみましょう。
こちらの場合は、onEndEdit
というプロパティについて詳しくみていく必要があります。
public UI.InputField.SubmitEvent onEndEdit{ get; set; }
onEndEdit
の型であるSubmitEvent
ってなんやねんとなるかもしれませんが、InputField用のUnityEvent
の事です。
内部的にもUnityEvent
クラスを継承しています。
いわゆる.NET
のSystem.Action
のUnityバージョンみたいなもので、大きな違いはインスペクターから設定できるかどうかです。
細かいところはこちらの記事が参考になると思います。
【Unity】UnityEventの用法と用量 - うら干物書き
ここらへんの知識から、以下のコードを作ってみました。
using UnityEngine; using UnityEngine.UI; public class InputFieldTest : MonoBehaviour { [SerializeField] private InputField _inputField; [SerializeField] private Text _text; private void Start() { // onEndEditイベントにUpdateTextメソッドを登録する _inputField.onEndEdit.AddListener(UpdateText); } private void UpdateText(string text) { // テキストを更新する _text.text = text; } }
AddListener
,RemoveListener
あたりはUnityイベントの独特なところなので、覚えておくと良いでしょう。
これを任意のゲームオブジェクトにアタッチし、テキストフィールドとテキストのゲームオブジェクトの参照を設定すれば動くはずです。
さいごに
インスペクターからの設定はとてもお手軽で便利ですが、気付いたら設定が消えていたり、見直したら意味がわからなくなってしまったりといった事もあります。
どちらにもメリットデメリットがあると思うので、うまく使い分けていけたらいいのではないかと思います。
ではまた。