Unity(ver:2022.3.11f1)で、でInputFieldを用いてテキストを入力します。作成したプロジェクト「InputFieldTest」では、ゲームオブジェクト「Button」を押下時にゲームオブジェクト「InputField」に入力されたテキストをコンソールに表示します。作成するスクリプトは表示されているゲームオブジェクト「Cylinder」に設定します。

ゲーム画面の作成

作成したゲーム画面を次に示します。

ゲームオブジェクト「Cylinder」は次のように作成します。

ゲームオブジェクト「InputField」「Button」は次のように作成します。

ゲームオブジェクトの配置

各ゲームオブジェクトの配置はInspectorで次のように設定しました。

  • Cylinder
  • InputField
  • Button

InputFieldの設定

ゲームオブジェクト「InputField」に次のように入力制限を書けます。

  • 英数字のみを入力
  • 「Content Type」:「Alphanumeric」

  • 文字数の制限
  • 「CharacterLimit」:制限文字数。「0」は無制限です。

スクリプトの作成

作成するスクリプトでは、ゲームオブジェクト「Button」のクリックイベントを受けて、ゲームオブジェクト「InputField」に入力されている英数字のテキストをConsoleに表示します。

Unityのスクリプトテンプレートを次のように作成します。

  • GameObject.Findメソッドのパラメータにゲームオブジェクト名(Cylinder1…等)を設定し、対応するゲームオブジェクトインスタンスを取得します。
  • ボタンの20行目でイベントリスナーを登録します。
  • 29行目でイベント処理を行います。

InputFieldTest\NewBehaviourScript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class NewBehaviourScript : MonoBehaviour
{
    // Start is called before the first frame update
    TMP_InputField inputField;
    GameObject cylinder;
    GameObject button;

    void Start()
    {
        cylinder = GameObject.Find("Cylinder1");
        //cylinder.transform.Translate(0.5f, 2.5f, 0.0f);
        inputField = GameObject.Find("InputField (TMP)1").GetComponent<TMP_InputField>();
        button = GameObject.Find("Button1");
        button.GetComponent<Button>().onClick.AddListener(ButtonClick);
     }

    // Update is called once per frame
    void Update()
    {

    }

    public void ButtonClick()
    {
        UnityEngine.Debug.LogWarning("ButtonClick: ");

        string str = inputField.text;
        UnityEngine.Debug.LogWarning(str);
    }

}

Unityの実行

ゲームをプレーすると次のようにゲーム画面が表示され、ゲームオブジェクト「InputField」に英数字を入力してゲームオブジェクト「Button」を押下すると、ゲームオブジェクト「InputField」に入力されたテキストが、Consoleに表示されます。

Consoleの表示を見るとボタン押下のイベントが2回発生しています。Inspectorの「OnClick」でイベント処理を登録するとイベントは1回表示します(正常動作)。なぜスクリプトでのイベント処理の登録で、イベントが2回発生するのか、原因不明。