Unity入門

【Unity】TMP_Dropdownの選択番号、選択値をスクリプトで取得する方法

この記事について

この記事ではTMP_Dropdownでの選択値をスクリプトで制御する方法が学べます。

この記事でわかること

  • dropdown.value で現在の選択インデックスを取得できる
  • dropdown.options[index].text で表示テキストを取得できる
  • onValueChanged.AddListener() を使えば選択が変わったときにイベントを処理できる

TMP_Dropdownとは?

TMP_Dropdownについては以下の記事を参考にしてください。

選択値をスクリプトで取得

TMP_Dropdownの準備

まずはヒエラルキーで右クリックをしてDropdownを1つ用意します。
・「右クリック」→「UI」→「Dropdown – TextMeshPro」

次にスクリプトを作成して先ほどのDropdown にアタッチしてください。

選択中の値を取得する方法(value / text)

Dropdownにはオプションに番号とテキスト情報が含まれています。
番号の取得には「.value」、テキストの取得には「.options[index].text」を使用します。

using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class Dropdown_GetValue : MonoBehaviour
{
    [SerializeField] private TMP_Dropdown testDropdown;
    void Start()
    {
        testDropdown = this.GetComponent<TMP_Dropdown>();

        int index = testDropdown.value; // 選択されている番号(0始まり)
        string selectedText = testDropdown.options[index].text; // 選択されているテキスト

        Debug.Log("Index: " + index);
        Debug.Log("Text: " + selectedText);
    }
}

実行してみると、Start時に番号とテキストを取得できました。番号は0から開始のようですね。

onValueChangedでイベント処理する方法

Dropdownの値を取得する方法としてUpdateで常に監視でもいいですが、変更された時に呼ばれる関数「onValueChanged」を今回は使用していきます。

using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class Dropdown_GetValue : MonoBehaviour
{
    [SerializeField] private TMP_Dropdown testDropdown;
    void Start()
    {
        testDropdown = this.GetComponent<TMP_Dropdown>();

        testDropdown.onValueChanged.AddListener(OnDropdownChanged);
    }

    private void OnDropdownChanged(int index)
    {
        string selectedText = testDropdown.options[index].text;
        Debug.Log(index + " / " + selectedText);
    }
}

実行してみると、確定したときにスクリプトが実行されましたね。デバッグもみやすいためこちらの方が良さそうですね。

まとめ

  • dropdown.value → 選択番号を取得
  • dropdown.options[index].text → 選択テキストを取得
  • dropdown.onValueChanged.AddListener → 選択変更イベントを処理