すくまりのメモ帳すくまりのメモ帳
← 記事一覧に戻る

【Unity, InputField】入力したテキストを取得して文字を消す方法

【Unity, InputField】入力したテキストを取得して文字を消す方法

はじめに

この記事ではUnityのInputFieldに入力したテキストを取得して文字を消す方法を紹介します。

InputFieldのセット

GameObject > UI > Input Field よりInputFieldをHierarchyにセットしてください。

自動的にCanvas とEventSystemがセットされ、Canvas内にInputFieldがあると思います。

これでゲームを実行すると、文字入力ができます。

では、Buttonを押したら文字列を取得できるようにします。

まず、Canvasの下にButtonを作成します。その後、Asset/Script 内にInputExample.csを作成し、以下のコードを入力してください。

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 = ""; 」を使ってしまうことです。

    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ではうまく作動しません。

以下のコードに書き換えてください。

    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で指定すると上手くいきます。

忙しい人のためのUnity入門講座へ