MRが楽しい

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

MRTK v2のドキュメントを少しずつ読み解く Hand Physics Extension Service

本日は MRTKv2 の調査枠です。
MRTKv2 の Guides ドキュメントを少しずつ読み進めていきます。

MRTKv2のGuidesドキュメント

以下のドキュメントを読み進めていきます。
microsoft.github.io

以下のページでは有志による本ドキュメントの日本語翻訳が行われています。
投稿時点でこちらで未翻訳、または著者が興味のある部分について記事にしていきます。
hololabinc.github.io

本記事では以下のページを読み進めます。
microsoft.github.io
f:id:bluebirdofoz:20200219094616j:plain

MRTK v2.3.0 がリリースされ、ドキュメントページも一部更新されました。
今回は 2.3.0 で新規追加されたページを読み解きます。

Hand Physics Extension Service

Hand Physics Extension Service は、剛体の衝突イベントと関節のある手との相互作用を可能にします。

Hand Physics Extension Service を利用する場合は Extensions パッケージをインポートする必要があります。
f:id:bluebirdofoz:20200219094634j:plain

拡張機能を有効にする

拡張機能を有効にするには RegisteredServiceProvider プロファイルを開きます。
[Register a new Service Provider]をクリックして新しい構成を追加します。
f:id:bluebirdofoz:20200219094647j:plain

コンポーネントタイプフィールドで HandPhysicsService を選択します。
f:id:bluebirdofoz:20200219094657j:plain

構成プロファイルフィールドで、拡張機能に含まれるデフォルトの手の物理プロファイルを選択します。
f:id:bluebirdofoz:20200219094708j:plain

プロファイルオプション

f:id:bluebirdofoz:20200219094719j:plain

Hand physics layer(手の物理レイヤ)

インスタンス化された手のジョイントが移動するレイヤーを指定します。

サービスのデフォルトは「デフォルト」レイヤー(0)です。
しかし、手と相互作用する物理オブジェクトには別のレイヤーを使用することをお勧めします。
別のレイヤーを使用しない場合、不要な衝突や不正確なレイキャストが発生する可能性があります。

Finger tip kinematic body prefab

どのプレハブを指先でインスタンス化するかを制御します。
サービスが期待どおりに機能するためには、プレハブに以下の要素が必要です。
・isKinematic が有効な Rigidbody コンポーネント
・コライダー
・JointKinematicBody コンポーネント
f:id:bluebirdofoz:20200219094807j:plain

Use palm kinematic body

手のひら部分のジョイントのプレハブをインスタンス化するかどうかを制御します。

Palm kinematic body prefab

[Use palm kinematic body]が有効な場合、インスタンス化されるプレハブです。
Finger tip kinematic body prefab と同様に、プレハブに以下の要素が必要です。
・isKinematic が有効な Rigidbody コンポーネント
・コライダー
・JointKinematicBody コンポーネント
f:id:bluebirdofoz:20200219094818j:plain

サービスの使い方

有効にしたら、コライダーのIsTriggerプロパティを使用して衝突イベントを受信します。
十本の指全て(および有効になっている場合は手のひら)から衝突イベントが発生します。

サンプルシーン

MixedRealityToolkit.Extensions/HandPhysicsService/Examples 配下に HandPhysicsServiceExample.unity というサンプルシーンがあります。
本シーンを完全に利用するためには Examples パッケージをインポートする必要があります。
f:id:bluebirdofoz:20200219094737j:plain