🙄
【XRI/InputSystem】Viveコンで、Trackpadを押し込んだとき(触れたときではなく)に移動するようにする
環境
- Unity 2021.3.7f1
- XR Interaction Toolkit 2.2.0
- OpenXR 1.4.2
- 検証デバイス
- HTC Vive Pro
- Meta Quest 2(単機とQuestLinkでPCVR)
やりたいこと
- 問題: スムーズ移動(Continuous Move)時、XRIのデフォルトの設定だと、Viveコンで移動しようとするときに、Trackpadに触れただけで移動してしまう。
- Trackpadに触れただけではなく、押し込んだときに移動するようにしたい
- VRChatではそのような挙動になっている
結論
- InputSystemのmodifierを活用することで、trackpadのvector2の入力と、trackpadClickedの入力を組み合わせて使うことができる
詳細
trackpadを押し込んだときだけ入力を受け取るようにする
- InputSystemのActionの設定で、
XRI LeftHand Locomotion
>Move
のアクションの下のバインドを変更する - もともとは、
Primary2DAxis [LeftHand XR Controller]
がバインドされている- これによって、コントローラーがどのデバイスであるかに関係なく、よしなに2DAxisの入力を取ってくれていて、それはそれで便利ではある
- だが、たまに不都合があり、今回の場合は不都合に当てはまっている
- 以下の
VIVE Move
アクションのようにバインドする(VIVE Move
アクションは説明用にVive限定で作っているが、後程他のMove
と統合する)- Actionの右の「+」ボタンから作成可能
- Actionの右の「+」ボタンから作成可能
- Modifierの方には、前提となる入力を入れる。今回であれば、
trackpadClicked [LeftHand HTC Vive Controller]
を入れる。 - Bindingには、本来入れたい入力を入れる。今回は
trackpad [LeftHand HTC Vive Controller]
を入れる。 - これによって、trackpadをclickしているときだけtrackpadの入力を受け取る。
1つのActionの中で他の入力と両立させる
- 上記は
VIVE Move
としてアクションを切り分けたが、同じMove
の中に入れたい。 - 上手くいかないやり方
-
Primary2DAxis [LeftHand XR Controller]
と並列にならべる - こうすると、触れただけで移動してしまう。
- これは、
LeftHand XR Controller
がXR系の入力を包含していて、その中にViveコンのtrackpadを触れただけの入力が含まれているから。
-
- 上手くいくやり方
- 以下のように、個別のコントローラーの入力をそれぞれ別で設定する(OculusとIndexをそれぞれ作る)
参考
捕捉
- 今回のContinuous Moveだけでなく、TurnやTeleport周りも同じように設定すればよい。
Discussion