はじめに
UnityでUIのDropDown(やButton)を扱うときのスクリプトで躓いたのでメモ。
環境
M1 Mac
Unity 2021.3.17f1
要点
GetComponent<Dropdown>()
がエラーでnullが返ってきて、その先が実行されない。
解決策
using TMPro;
を追加し、
GetComponent<TMP_Dropdown>()
に変更する。
UIを追加する際に、お尻に「TextMeshPro」と書いてある物を使うときは、このように書く必要があるようだ。UI>Legacy>Dropdownがあるが、なんとなく推奨されず、消えゆくのかなと思ったので、使ってない。
が、他のサンプルサイトの多くは、Legacy機能を使っているようで、コードをコピペしただけでは、うまく動かない。
コード
TestDropDown2.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class TestDropdown2 : MonoBehaviour{
List<string> options = new List<string>() { "Motion1", "Motion2", "Motion3", "Motion4", "Motion5" };
public void Start(){
TMP_Dropdown dropdown = GetComponent<TMP_Dropdown>();
dropdown.ClearOptions();
dropdown.AddOptions(options);
dropdown.onValueChanged.AddListener((value) => OnValueChanged(value));
}
public void OnValueChanged(int value){
Debug.Log(value);
}
}