OculusQuestで今コントローラーモードなのかハンドトラッキングモードなのかってどうやって判定するんだろう?
結論から言うと
OVRInput.GetActiveController()== OVRInput.Controller.Hands
みたいな感じで取れる。他にもいい方法があるかもしれない
OVRHandTest.cs
OVRHandTest.csというサンプルスクリプトにいろいろ状態取得があった!
動かしたときの記事はこちら
【OculusHandTracking】環境構築とサンプルシーンを見る【Unity】 - トマシープが学ぶ
OVRInput.GetActiveController()
これで今のコントローラーの種類が取得できる。
GetConnectedControllersだと接続しているすべてのコントローラーが表示される。(接続とは・・・?)
prevConnectedは一つ前に接続していたコントローラーかな?よくわからない
というわけで
OVRInput.GetActiveController()== OVRInput.Controller.Hands
みたいな感じで取れる。
切り替わりの監視
update()でずっと監視するのはよくないよね?
UniRxみたいに変わったときに毎回1回だけ実行したい。
OVRHandTest.csにBoolMonitorあたりがそれっぽい?
static BoolMonitor controllers = new BoolMonitor("Controllers Changed", () => { return OVRInput.GetConnectedControllers().ToString() != prevConnected; });
controllers.Update();
controllers.AppendToStringBuilder(ref data);
prevConnected = connectedControllerNames;
それっぽいけど使い方がよくわからない
isHandTracked
OVRHand.csのIsTrackedで手がトラッキングされてるかが分かる。
Tracking Hands and Confidence Level
At any point, your app logic may want to check if your app detects hands. OVRHand.cs provides the
IsTracked
property to verify whether hands are currently visible and otherwise not occluded from being tracked by the device. It also provides theHandConfidence
property that indicates the level of confidence the tracking system has for the overall hand pose. The property returns the confidence level asHandConfidence
values, eitherLow
orHigh
.
公式ドキュメントより
でもこれってハンドトラッキングモードで、かつ手が見えてる時ってことだよね~
おまけ:OVRPluginのHand
OVRPluginのHandには何が入ってるのかな?
if (OVRPlugin.GetHandState(step, (OVRPlugin.Hand)HandType, ref _handState))