【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によっては実行されない場合があるため採用していません。

宣伝

アセットストアで便利ツールを販売しています!

お布施も受け付けています!


この記事が気に入ったらサポートをしてみませんか?