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

