【Unity×SteamVR】複数ペアのコントローラの情報を1PCで取得する方法 ~ダウングレード ~(2019年3月時点)

 はじめまして、インターン生の河野です!この記事は、2018年夏頃に急にできなくなった「複数ペアのコントローラの情報を 1PC で取得」を何とかしてできるようにする方法について書いたものです。

1. この事の発端

 この発端は、今回私が行った「SteamVR Knuckles EV3 コントローラを試す」の要件のひとつとしてあった、

 機材を増やさないために、複数ペアのコントローラを 1PC に接続、情報を取得してサーバに送信する

を行う際に、色々な Unity × SteamVR の記事を見てやっても複数ペアのコントローラのアクションが取れなかったことにあります。「SteamVR Knuckles EV3 コントローラ」 については、以下の記事を見てください。

【SteamVR Knuckles EV3】手に”着ける”コントローラを試す!- Techno sports

2. 3台以上のコントローラの接続の仕方

 この問題の前に、まずは PCにコントローラをつなげる方法についてです。

 コントローラ 2台までは HTC VIVE の HMD に内蔵されているドングルによって特に難なく接続することができます。3台以上のコントローラをつなぐには、「USB 有線接続」か「VIVE トラッカーのドングル」をつけることでペアリング可能になります。また、HTC VIVE の HMD を PC に接続したり、コントローラを USB で有線接続する、VIVE トラッカーのドングルを PC に接続する場合、それらの線は USB3.0 ですが、USB3.0 だとうまく認識できない場合があります。特に、複数台のコントローラを接続する際には、USB3.0 でなく USB2.0 のハブや変換コードを使用することを推奨します。

 ただし、各ドングルをつけるのはコントローラをそのドングルにペアリングする直前にし、まだペアリングしていない他のコントローラの電源は切っておきましょう。ドングルは勝手にコントローラにペアリングしてしまうことがあり、接続順番がややこしくなって Unity 側で苦労するかもしれません。

3. SteamVR Unity Plugin v1・v2
~ 結論「これは問題でなかった」 ~

 Unity で SteamVR につながったコントローラの情報を取得するためには、公式パッケージSteamVR Unity Plugin v2を使用します。

 試しに、コントローラを4台繋いで、SteamVR Unity Plugin v2 をインポート、Prefabs からコントローラを接続するためのオブジェクトである [CameraRig] を出して、動かしてみたところ…

 あれ?姿勢は全て取れるけど、3台目以降のコントローラのアクションが取れない?

 SteamVR Unity Plugin v2 は2018年9月頃にリリースされましたが、v1 との急な大幅な仕様変更が問題になっていました(v2 では、SteamVR Interaction System や Skeletal Input など、コントローラ・アクションを機能性高く簡単に(?)開発できるようにする体系が登場しました)。そういう急な仕様変更の一部かと思って v1 も色々と試しましたが、 特に何も解決しませんでした。

4. 解決方法 ~「SteamVR」のダウングレード~

 結果としては、SteamVR Unity Plugin でなく SteamVR 自体のアップデートが問題でした。解決法は今のところ、「SteamVR と SteamVR Unity Plugin v1 を2018年夏以前のバージョンへダウングレードすること」のみ。

 今回は、2018年5月頃のものに戻しました。最新版の SteamVR Unity Plugin v1 で標準コントローラのアクションは取れたので、Plugin のダウングレードは必須ではなさそうです。「5月頃」まで戻したのは、8月後半に複数ペアのコントローラのアクションが取れなくなった報告が Twitter などで散見されましたが、その前の6~7月くらいから VIVE トラッカーの挙動がおかしくなったという報告もあり、安定していなかったためです。

 ちなみに、Unity AssetStore には SteamVR Unity Plugin v2 しかありません。SteamVR Unity Plugin v1 はこの公式のリポジトリからダウンロードしましょう。v1 でのコントローラの情報の取得方法は、次の記事を参照してください。

【SteamVR Unity Plugin v1】UnityでSteamVRコントローラの情報を取得する方法 – Techno sports

5. SteamVR のダウングレード方法

 SteamVR のダウングレードの方法は「Steam コミュニティ :: ガイド :: How to Downgrade Game Version」を見ればわかります。ただ、完全に英語なので、一応ここに日本語で方法を述べておきます。

 Steam のアプリは、PC のどこかにある “Steam/steamapps” にそのまま入っています(私の場合は “ProgramFiles(x86)” にありました)。そのファイルを昔のもので上書きすればダウングレードができます。その昔のファイルを手に入れて、ダウングレードする方法を以下に項に分けて述べます。

 クリックすると、内容リストが展開します。

元に戻す場合は、4項で変えた属性値をもとに戻し、SteamVRのアプリファイルをバックアップデータを入れ替えるか、アンインストールして再度インストールすれば戻ります。

6. 最後に

 今回は、複数ペアのコントローラの情報を 1PC で取得するために、現在(おそらく)唯一の方法である「SteamVR のダウングレード」を紹介しました。ただし、そのためには SteamVR Unity Plugin v1 を使うことになり、新しいデバイスや機能は対応できません(やりようによっては v2 も使えるかもしれませんが)。この問題以外に、現在の SteamVR では VIVE トラッカーの障害があるそうです。正直これらの問題は Steam 側の対応待ちではあると思われますが、ことARへのコントローラの活用のために、複数ペアのコントローラ使用ができるようになってほしいものです。

 また、SteamVR Unity Plugin の下には、OpenVR というプラットフォームがあります。これを直にたたくことで HMD を必要とせずにコントローラを使用できたりするらしく、現在の SteamVR で複数台接続ができる可能性があるかもしれません。

 今回紹介した方法以外で何か良い方法、間違っていること、省略できることなどがあったら、コメントをいただけると幸いです。

コメントを残す