MRが楽しい

MRやVRについて学習したことを書き残す

MRTKv2.xで手のひらに追従するUIを作成する

本日はMRTKv2.xの小ネタ枠です。
MRTKv2.xで手のひらに追従するUIを作成する方法を記事にします。

HandConstraintPalmUp

MRTKには手のひらがユーザーの方を向いているときにオブジェクトを動作するためのHandConstraintPalmUpコンポーネントが用意されています。
learn.microsoft.com

サンプルプロジェクトの作成

MRTKを使った基本プロジェクトの環境構築手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

今回はデフォルトの DefaultMixedRealityToolkitConfigurationProfile で作成したプロジェクトを利用します。

追従の設定

手のひらに追従するゲームオブジェクトを作成します。
作成したゲームオブジェクトにHandConstraintPalmUpコンポーネントを追加します。

HandConstraintPalmUpコンポーネントを追加すると必須コンポーネントのHandBoundsとSolverHandlerが自動で追加されます。

オブジェクトが手に追従するようにSolverHandlerコンポーネントの[Tracked Target Type]を[Hand Joint]に変更します。

この状態でゲームオブジェクトが手のひらに追従するようになります。
シーンを再生してシミュレータで手を表示するとゲームオブジェクトが追従することを確認できます。

子ゲームオブジェクトにボタンオブジェクトなどを追加することで手のひらに追従するUIが作成できます。


その他の設定例

追従個所を変更する

両手または左右どちらかの手にのみ追従させたい場合は[Trackied Handedness]の設定で変更可能です。

余白の距離を調整する

大き目のUIを表示する場合、[Safe Zone Buffer]の値を大きくすることで手のひらからの距離の余白を調整できます。

手のひら検出時のみUIを表示する

手のひらを検出したときだけUIを表示したい場合は[On First hand Detected]と[On Last Hand Lost]イベントを利用します。
[On First hand Detected]にUIの有効化を、[On Last Hand Lost]にUIの無効化を設定します。

更にUIをデフォルトで無効化しておきます。

これで手のひらを検出するとUIが有効化され、手のひらをロストするとUIが無効化されるようになります。

なお、HandConstraintPalmUpコンポーネントの各種イベントの実行タイミングは以下のとおりです。

On Hand Active:手を検出中の間、常に実行されるイベントを登録します。
On Hand Deactive:手を検出していない間、常に実行されるイベントを登録します。
On First hand Detected:手を検出した時、一回のみ実行されるイベントを登録します。
On Last Hand Lost:手をロストした時、一回のみ実行されるイベントを登録します