はじめに
この記事ではUnityのInputFieldに入力したテキストを取得して文字を消す方法を紹介します。
InputFieldのセット
GameObject > UI > Input Field よりInputFieldをHierarchyにセットしてください。
自動的にCanvas とEventSystemがセットされ、Canvas内にInputFieldがあると思います。
これでゲームを実行すると、文字入力ができます。
では、Buttonを押したら文字列を取得できるようにします。
まず、Canvasの下にButtonを作成します。その後、Asset/Script 内にInputExample.csを作成し、以下のコードを入力してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class InputExample : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } public void GetText() { //InputFieldのTextコンポーネントを取得 Text inputText = GameObject.Find("InputField/Text").GetComponent<Text>(); //Text型をstring型に変換 string name = inputText.text; Debug.Log(name); } } |
このスクリプトをHierarchyのInputFieldに取り付けて、以下のようにButtonに紐づけします。
これでゲームを実行すると、以下のようになります。
これで入力した文字を取得できました。
次に、Buttonを押したら入力した文字が消えるようなコードを書きたいとき、よくある間違いが、「inputText.text = “”; 」を使ってしまうことです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public void GetText() { //InputFieldのTextコンポーネントを取得 Text inputText = GameObject.Find("InputField/Text").GetComponent<Text>(); //Text型をstring型に変換 string name = inputText.text; Debug.Log(name); inputText.text = ""; Debug.Log("inputText" + inputText.text); } |
「inputText.text = “”; 」の考え方は間違いではないのですが、Unityの仕様上、InputFieldではうまく作動しません。
以下のコードに書き換えてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public void GetText() { //InputFieldのTextコンポーネントを取得 Text inputText = GameObject.Find("InputField/Text").GetComponent<Text>(); //Text型をstring型に変換 string name = inputText.text; Debug.Log(name); //InputField コンポーネントを取得 InputField form = GameObject.Find("InputField").GetComponent<InputField>(); form.text = ""; } |
textを直接空にするのではなく、InputField.textで指定すると上手くいきます。