【Unity】キーボードからカーソル選択するセレクトリストを作る(1)
やり方を調べたいこと
カーソルを移動させて選択できるインベントリ ウインドウを作りたい。ポケモンのリュックみたいなやつ。画像はElonaのウィンドウだが、要するにこの通りのものが作りたい。
uGUIのレイアウトについてはちょっと調べたが、コントロールの方法が全く分からないので1からやっていく。
サンプルのUIを組む
動作を確認したいので新しいシーンに最小限のを作った。
Canvasの下に、コンテナとしてImageオブジェクトを置く。
ImageにはVertical Layout Groupを追加でアタッチ。
その下にButtonを幾つか配置。
Navigationを試す
次に、「unity ui キーボード 選択」あたりでググって、
- uGUIでUI要素へのフォーカスを遷移させることは、Navigationという概念らしい。
- ほとんど自動的とすらといえる簡単な実装で、矢印キーに反応して選択中要素が変わるボタンのリストを作れる。
- ただし、初期状態で選択している要素を1つ指定する必要がある。
- UIへの入力は、ヒエラルキーでUI要素を作ると勝手に生えてくるEventSystemオブジェクトが、入力の検知からハンドリングまで勝手にいい感じにやってくれている。いい感じにやってくれる程度では早晩困るので、いじらないといけないだろうが。
あたりの情報が得られた。
具体的な操作としては、各ブログ師と公式のガイドから得られた操作は、まずButtonコンポーネントが持っているNavigationという変数を設定する。ボタンの色分けは分かりやすいように変えておく。
そうするとSceneに黄色い矢印が出てきてUI要素同士の遷移関係をいい感じに構築して表示してくれる。すごい。出ないなと思ったらVerticalLayoutなのに間違ってHorizontalを選択していた。
ボタンを最初の要素として選択するには、インスペクターでEventSystemのFirstSelectedを設定するとか、プレイ中にボタンをクリックするだけでよかったが、コードで書いてから気づいた。
コードからButtonのinteractableプロパティをfalseにすると、このようにその要素をトーンダウンして遷移はすっ飛ばすようになった。合理的な動きだが、トーンダウンしたものも飛ばさず選択を乗せられるようにもしたいところだ。
次はドキュメントを見つつこれらの仕組みを掘り下げていく。