夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

MRTK3のサンプルプロジェクトを見る HandInteractionExamples その①鍵盤

本日はMRTK3枠です。

〇MRTK3のサンプルプロジェクト

MRTKv2ではサンプルパッケージが存在し、サンプルを導入することができましたが、MRTK3の場合は23年5月現在はサンプルパッケージとしては存在せず、GitHubのブランチから入手する必要があります。

こちらに関しては過去の記事を参考にしてください。

redhologerbera.hatenablog.com

〇HandInteractionExamples

HandInteractionExamplesはその名の通り手を使ったインタラクション周りのサンプルです。

〇ピアノ

ピアノはシーンの中央に存在するオブジェクトです。

手を使って演奏することができます。

オブジェクトの構成

ピアノのオブジェクトはそれぞれの鍵盤のオブジェクトにMovingKeyTransformオブジェクト、そしてMovingKeyGeometryで構成されています。

MovingKeyTransformオブジェクトは空のオブジェクト、MovingKeyGeometryには実際の鍵盤のメッシュが存在しています。

実際の挙動はすべて親オブジェクトのキー名(CであればCオブジェクト)で制御されています。

このオブジェクトはコライダーなどのほかにPressable Buttonコンポーネントがアタッチされており、これがキーの挙動を制御しています。

〇Pressable Button

Pressable ButtonはMRTK3のコンポーネントで、選択が行われると何かしらのインタラクションを返すボタンを作成することができます。

learn.microsoft.com

設定を軽く見ていきます。

Selection Modeはどのように使用されるのかを設定するようです。ここではButtonとして設定されており、名前の通り選択に対してインタラクションを起すようになります。

Collidersには自身のボックスコライダーが設定されており、Pressable Buttonのコライダーとして設定されています。

Advanced Statefullnteractable SettingsSelect Thereshouldではボタンを押したという検知の閾値(精度)を設定できます。 値が小さければ小さいほどコライダーに触れただけで押したと判断され、値が大きいほどしっかりとコライダーに指を押し込む必要があります。

Deselect Threshouldはボタンを離した際に再度ボタンを押したと検知されるまでの閾値になります。

値が小さければ小さいほどボタンを触れて話した際にしっかりとコライダーから指を話す必要があります。

逆に大きければ大きいほどコライダーから指を話す際に二重、三重でボタンを押したという検知が行われます。

Volumetric Press Settingsはボタンを押した際にどのくらいオブジェクトが動くか(押されたアニメーションを行うか)を設定します。

Distance Space Modeはアニメーションの挙動がLocal座標で行われるかワールド座標で行われるかの設定です。

Start Push Planeはボタンを押す前のデフォルトのオブジェクトの位置です。

値を下げると初期値が下がります。

End Push Planeはボタンを押し込む際にどこまで押し込むか?という設定です。

値を大きくすることでよりボタンを押し込む必要性が発生します。

実際の挙動は以上です。アニメーションではなくすべてPressable Buttonコンポーネントで行われていることがわかりました。

次に鍵盤を選択した際にその鍵盤に対応する音がしますが、これはXRI Interactable Eventでイベントが指定されています。

XRI Interactable EventはXR Interaction Toolkitのイベントを継承しており、Selectはボタンが押された=選択された場合のイベントです。

ここでAudioClipを当てはめて音源を再生しています。

以上が鍵盤の仕組みになります。