Unity(ver:2022.3.11f1)で、でInputFieldを用いてテキストを入力します。作成したプロジェクト「InputFieldTest」では、ゲームオブジェクト「Button」を押下時にゲームオブジェクト「InputField」に入力されたテキストをコンソールに表示します。作成するスクリプトは表示されているゲームオブジェクト「Cylinder」に設定します。
ゲーム画面の作成
作成したゲーム画面を次に示します。
ゲームオブジェクト「Cylinder」は次のように作成します。
ゲームオブジェクト「InputField」「Button」は次のように作成します。
ゲームオブジェクトの配置
各ゲームオブジェクトの配置はInspectorで次のように設定しました。
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回発生するのか、原因不明。
											
				






