【Unity】ScrollbarのNavigationをゲームパッドに対応させる
ゲームパッドを操作したとき、ScrollView(Scrollbar)のデフォルトの挙動は次のようになります。
隣にボタンがない:スクロールする
隣にボタンがある:スクロールせずボタンを選択する
後者を、次のように変更したいです。
隣にボタンがある:スクロールする。端に到達したなら隣のボタンを選択する
利用規約を下までスクロールするとOKボタンが選択される、というようなイメージです。
コード
以下からダウンロードまたはコピペしてください。UPMでもインポートできます。
動作内容
ScrollbarNavigationSwitcherコンポーネントをScrollbarコンポーネントと同じオブジェクトに付けるだけで動作します。
基本的には、Scrollbarの値が変わるたびにNavigationの値を変更します。Scrollbarの値が最小または最大のとき、隣のオブジェクトが選択可能になります。
例:縦のScrollbarに使用する場合
スクロール中は上下のNavigationが無効になります。
一番下までスクロールすると下方向のNavigationが有効になり、下にあるボタンが選択されます。
コード解説
Navigationの値を書き換える際の分岐にNavigation.Modeを駆使しています。これはFlagsであることに途中で気づきました。
if (enableDown)
{
if ((sampleNavigation.mode & Navigation.Mode.Explicit) != 0)
{
customNavigation.selectOnDown = sampleNavigation.selectOnDown;
}
if ((sampleNavigation.mode & Navigation.Mode.Vertical) != 0)
{
customNavigation.selectOnDown = scrollbar.FindSelectable(Vector3.down);
}
}
scrollbar.FindSelectable(Vector3.down)を使っていますが、実はscrollbar.FindSelectableOnDown()という関数も存在します。しかし現在のNavigationによっては実行されない場合があるため採用していません。
宣伝
アセットストアで便利ツールを販売しています!
お布施も受け付けています!
この記事が気に入ったらサポートをしてみませんか?