背景
ゼミ生がVIVEトラッカーを使ってフルボディトラッキングしたVRアプリ開発をしています.
ベースステーション2.0が入手できないという問題もありましたが,インターネットリテラシが高いようで,色々な記事を参照しながら何とか進めてくれています.
参考にしている記事の1つが以下だそうです.
この記事を見ながら進めていたのですがうまく行かないどころかあるとかで原因究明のサポートをしようと同じようにやってみました。
私も経験がなかったので,ゼミ生に教えてもらいながら動かそうとしましたが...確かになかなか難しい.情報もあるようでない。
プログラミングの手順は,すべてオンスクリーンに現れる情報ですので,スクリーンキャプチャしたり,画面録画すればそこにない情報は基本的にありません.
しかし,ハードウェアやVRの場合は,ハードで見える世界での設定などがあり,手順を網羅的に記述することが難しい(あるいは,記事を書いている本人も慣れていて無意識に省略してしまうこともあるかも?)のです.
恐らく.VR開発している方にとっては当然のことなのでしょう.
前提
まず,前提ですが,VRアプリはUnityで開発することを前提とします.UnityでQuest2のアプリを開発する場合,通常(何を持って「通常」と呼ぶかによるかもしれませんが少なくともOculusアプリ開発でSteamVRを選択する記事はあまり見かけませんという意味です)は使わないSteamVRを使います.これはVIVEトラッカーを認識させてUnityアプリで使いたいからですね.
何が問題なのか?
上記のQiitaの記事の通りに操作しても,どういうわけか,Quest2のコントローラを動かしても反応しない...のです.設定は色々と試行錯誤してみたのですが,うんともすんともいかない...記事ではすんなり動いているのにです.
問題が発生するまでの手順
まず,Unityを起動して,3Dのテンプレでプロジェクトを新規作成し,Asset StoreからSteamVRプラグインをインポートします.このあたりは記事がありますのでぐぐってください.
このあと,UnityにQuest2のコントローラを認識させるため,UnityのWindowメニューからSteamVR Inputを選択します.
すると,以下の画面が表示されます.ここで,右下のOpen binding UIというボタンを押します.
すると,以下の画面が表示されます.以下の編集ボタンを押します.
すると以下の画面が表示されます.この画面でPosesというボタンを押します.
すると以下の画面が表示されます.実は,ここが問題なんですね...いや,何かどう問題なのかわかっていません...コントローラが認識されないときにはこの画面になるということがわかっています.
偶然,やったときに動いたことがありました.そのときには,上記の画面が以下のように表示されたんですね...このあとは,すんなりHMDもコントローラも認識されてユニティちゃんを動かすことができたわけです.
どう操作したらこの画面が出せるのか?ここが問題でした.
確定的ではないのですが,さきほど授業が終わって1時間くらい操作してだいたいわかりました.
解決方法?
肝はSteamVRアプリの状態とHMDの状態のようです.Unityの設定は関係ありません.とりあえず,表示がでる確率の高い方法を書いておきます.これはSteamVRの仕様なのではないかと思うのですが,その辺詳しい方がいらっしゃいましたら教えてください.なんとなくVIVEの利用説明書みたいなものに書いてあるんじゃないかなと思ったりします.
(1)Unityプロジェクトを起動します.
(2)Quest2でAirLinkを接続します.
(3)以後の操作は,できるだけQuest2を装着(装着しないまでもQuest2がスリープしない程度に手に持って覗きながらでもいい)した状態でするといいです.Quest2の画面内でAirLinkのメニューからデスクトップを選択します(右から2番目くらいだったはず).
(4)HMD内で表示されたPCのデスクトップ画面の中から操作して,SteamアプリからSteamVRアプリを起動します.SteamVRアプリが起動済みで,もしHMDとかコントローラが認識されていない状態でしたら,リセットというリンクがSteamVRアプリに表示されていると思いますのでリセットするとSteamVRアプリがHMD内に表示されると思います.
(5)HMD内でSteamVRアプリが起動したら,その中のメニューでデスクトップを選択します.するとAirLinkと同じように,PCのデスクトップ画面がHMD内に表示されます.
(6)この状態で,UnityのWindowメニューからSteamVR Inputを選択し...という操作をしてみてください.すると,Posesボタンを押したあとに,right_poseとかleft_poseとかが表示されるようになります.うまくいかない場合もありますので,その場合は,SteamVR Inputメニューを選択して表示される画面を一度閉じて同じ操作をしたり,Unityを再起動してみたり,戻れるところまで戻って同じ操作を繰り返していると,できるようです.あとコントローラの画面でミラーモードというチェックボックスが出てきますが、これをオフにするのも効くことがあります。左右のコントローラを独立して使いたいので基本オフですね。たぶん。
ポイントは,SteamVRアプリの操作やSteamVR Input以降の操作をHMD内の画面をみながら操作すること...のようです.ただ,結局はデスクトップ上のアプリを操作していて,それをPCで見るかHMDで見るかなのであまり関係ないように思えてなりません.
恐らく,SteamVRアプリを起動する前から設定が終わるまで,Quest2やコントローラが操作の途中でスリープしてしまうことがないようにする...がポイントなのではないかと感じています.確かではありませんが.
とりあえずメモということで.
おしまい.