Unity入門

【Unity】InputFieldの使い方 | 初期値、入力値取得、パスワード入力、入力制限

Unityでユーザーからのテキスト入力を受け付けるには、InputField(TextMeshProのTMP_InputField) を使うのが一般的です。

この記事では、InputFieldの基本からスクリプト制御、カスタマイズ、よくあるエラーと対策まで を詳しく解説します!

この記事で学べること

  • UnityのInputField(TMP_InputField)の基本的な使い方
  • スクリプトからテキスト・プレースホルダーを取得・設定する方法
  • パスワード入力や数値入力の制限方法
  • よくあるエラーと解決策

UnityのInputFieldの使い方

InputFieldの追加方法

① Hierarchy から追加

  1. [Hierarchy]→[右クリック]→ [UI] → [InputField – TextMeshPro] を選択
  2. シーン内にInputField(TMP)が追加される

② InputFieldの構成要素

  • InputField(TMP) → 入力を管理するコンポーネント
  • TextMeshPro(TMP) → ユーザーが入力したテキストを表示
  • Placeholder(プレースホルダー) → 未入力時に表示されるテキスト
  • Image(枠) → 入力欄の背景デザイン

※ Canvas、TextMeshPro、Imageは以下のサイトを参考にしてください。

Placeholderを使用して初期値を設定

InputFieldを使うとなると初期時に薄いグレーの文字でヒントを出すことが多いと思います。

InspectorでPlaceholderの初期値を設定

Unity InputTextのコンポーネントの画像

スクリプトでPlaceholderの初期値を設定

スクリプトからInputFieldのプレースホルダーを変更すれば、InputFieldの初期値を設定できる。

using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class InputExample : MonoBehaviour
{
    public TMP_InputField inputField;
    void Start()
    {
        inputField.placeholder.GetComponent<TextMeshProUGUI>().text = "Hello";
    }
}

スクリプトで入力値テキスト)を取得・設定

入力された入力値テキストを取得

TMP_InputFieldを使うと、ユーザーが入力したテキストを取得できる。

ユーザーが入力した内容を取得できる
ボタンを押した時にテキストを取得する場合に便利

using UnityEngine;
using TMPro; // TextMeshProを使う場合は必須
using UnityEngine.UI;

public class InputExample: MonoBehaviour
{
    public TMP_InputField inputField;

    public void GetInputText()
    {
        string userInput = inputField.text;
        Debug.Log("入力されたテキスト: " + userInput);
    }
}

初期値を設定する(テキスト)

スクリプトからInputFieldのテキストを変更すれば、InputFieldの初期値を設定できる。

using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class InputExample : MonoBehaviour
{
    public TMP_InputField inputField;

    void Start()
    {
        inputField.text = "Hello";
    }
}

パスワード入力や制限の設定

パスワード入力をマスクする(Inspector)

InputFieldの Content Type を Password に設定することで可能

Unity InputTextの入力制限の画像

パスワード入力をマスクする(スクリプト)

InputFieldの Content Type を Password に設定することで可能
➡ ユーザーが入力した文字を * で表示

inputField.contentType = TMP_InputField.ContentType.Password;
inputField.ForceLabelUpdate(); // 変更を即時反映

パスワード以外の設定

前項でパスワードの設定ができたが他にもいくつか設定できるので紹介しておきます。

よくあるエラーと対策

NullReferenceException が出る

スクリプトでinputField.textを使う前に、InspectorでInputField(TMP) をセットしているか確認
inputField.ForceLabelUpdate(); を呼び出して変更を即時適用する

入力しても反映されない

InputFieldのRead Onlyがオフになっているか確認
スクリプトでForceLabelUpdate()を実行して強制更新

モバイルでキーボードが開かない

TouchScreenKeyboardを手動で有効化

inputField.ActivateInputField();

まとめ

TMP_InputField.textで入力された文字を取得できる
Content Typeを設定すれば、パスワード入力・数値入力も制限可能
プレースホルダーやフォント、枠線のカスタマイズもできる
スクリプトでForceLabelUpdate()を実行すれば、変更を即時適用可能