Questハンドトラッキングを実案件で使ってみた所感
システム
先日、弊社でQuestハンドトラッキングを実案件で初めて使用したので、
その所感と簡単なTipsなどを紹介します。
開発環境
Unity 2019.4.1f1
Oculus Integration v18.0
サクッと動作確認をしてみる
何はともあれ、まずはどうすれば実機で動作するのか、ミニマムにやっていきます。
アセットストアから Oculus Integration をインポートします。
OculusProjectConfig の Target Device を Quest に、
Hand Tracking Support を Controllers And Hands もしくは Hands Only に設定します。
空のシーンを用意して、OVRCameraRig を配置します。
左右の HandAnchor 直下に OVRHandPrefab を配置し、
右手側のオプションを Hand Right に変更します。
ビルドして実機で実行すると、以下のような黒い手が出てきます。
(ビルドにまつわる解説は割愛します。)
OVRHandPrefabについて
あらかじめ様々なコンポーネントがアタッチされており、
骨表示にしたり、インタラクションのためのコライダをつけたり、
また、↑動画のようにトラッキングができなくなると自動的に消えたりします。
とても便利そうなのですが、骨やメッシュ自体のオブジェクトがランタイムで生成されるため、
案件に合わせた、より細かい仕込みをするのが困難です。
OVRCustomHandPrefabについて
そこで、別で用意されている OVRCustomHandPrefab を使用します。
こちらは左右別々のプレハブが用意されているので、それぞれを HandAnchor の直下に配置します。
OVRHandPrefab と違い、エディター上でモデルと骨のオブジェクトを確認できるので、
例えば、細かいボタンを押すために指先だけにコライダを仕込んだりなど、
用途に合わせたカスタマイズがしやすいです。
ただし、トラッキングが外れた場合は、
消えるのではなくローカル座標が(0, 0, 0)に来るだけなので、(↑画像のような配置になる)
カメラから不自然な見え方をしてしまいます。
特に両面描画をしている場合はなおさらです。
トラッキングロスト時の非表示機能は OVRHandPrefab にアタッチされている
OVRMeshRenderer.cs 内に記述されているので、
必要部分だけを抜き出したコンポーネントを新たに作成し、アタッチすればよいです。
MeshNode をデュプリケートして、見た目の違う手を(マテリアル & シェーダーが違う)
フェードで入れ替えたりなんかもできます。
ピンチ値の利用
各指のピンチ値を取得する事ができるので、
ピンチしていない状態(開いている)= コライダー On
ピンチしている状態(閉じている)= コライダー Off
という設定をすることで、意図しない操作を防ぐことができました。
Oculus Link は必須
スムーズにデバッグを進めるためには Oculus Link は必須です。
無いとハンドトラッキングを使用したコンテンツ制作は不可能、と言っても過言ではありません。
しかし、こいつは曲者です。うまくいったりいかなかったりします。
どうにかして環境構築してください。