[Unity] TMP_Dropdownはプレースホルダーを設定できる
UnityでTMP_Dropdownを使用していて、プレースホルダーの設定に手間取ったので、設定方法を記録しておきます。
UnityのTMP_Dropdown(TextMeshPro2.1以降)では、プレースホルダーを設定することができます。
ただし、レガシーのDropdownではプレースホルダーを設定することはできません。
検証環境
- MacBookAir M1
- Unity 2022.3.12f1
- TextMeshPro 3.0.6
プレースホルダーの設定方法
実装方法の一例を述べます。
1. TMP_Dropdownの配置
ヒエラルキー上でUI > Dropdown - TextMeshPro
を選択して、ドロップダウンを配置します。
2. プレースホルダー用テキストの作成
プレースホルダー用のテキストを作成します。ここでは、すでにDropdownオブジェクトの子として存在するLabelというオブジェクトを複製して使い回すことにします。
"PlaceHolderLabel"という名前にしてみました。このオブジェクトのTextMeshProUGUIコンポーネントを自由に編集して、好きなテキスト、色にします。
このような見た目にしてみました。
3. インスペクターでの設定
作成したDropdownをインスペクタで開き、Placeholder
に、作成したプレースホルダー用のオブジェクト(のTextMeshProUGUIコンポーネント)を配置してください。また、Value
を-1
に設定してください。
この状態でシーンを再生すると、以下のように、初めはプレースホルダーが表示されており、一度選択した後はプレースホルダーを選択できなくなっていることが確認できると思います。
後は、ゲームに合うようにデザインを修正して完了です。
注意点
TMP_Dropdownのplaceholderの設定はTextMeshPro 2.1 (2019.1~)から追加されたもので、それ以前のTMProには存在していなかったようです(参考:TextMeshPro2.0のドキュメント)
placeholder追加以前に書かれたと思われる記事では、日本語・英語いずれでも「標準のTMP_Dropdownではプレースホルダーを実現できません(意訳)」のような記事が多く見つかるため、それを間に受けて実装してしまうと、遠回りになってしまうかもしれません(私はしました)
インスぺクタを見るとすぐに気づけるかもしれませんが、私は気づきませんでした。(TMP_Dropdownの継承クラスを使っており、エディタ拡張が適切に継承されていなかったため、PlaceHolderがインスペクタに表示されていないというオチでした)
まとめ
TMP_Dropdownでプレースホルダーを設定する方法を説明しました。
ググって出てくる情報が必ずしも正しいとは限らない(バージョンアップで仕様が変わることもある)ので、ドキュメントをちゃんと読む+自分が使用しているソフトとドキュメントのバージョンを合わせることは重要だなあと感じました。
Discussion