MRが楽しい

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

MRTK v2のドキュメントを少しずつ読み解く ジェスチャー

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

MRTKv2のGuidesドキュメント

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

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

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

ジェスチャー

ジェスチャーは、人間の手に基づく入力イベントです。
MRTKでジェスチャー入力イベントを発生させるデバイスは2つのタイプがあります。

HoloLensなどのWindows Mixed Realityデバイス

ピンチモーション(エアタップ)とタップアンドホールドジェスチャについて説明します。
HoloLensのジェスチャーの詳細については Windows Mixed Reality Gestures のドキュメントを参照してください。
docs.microsoft.com

WindowsMixedRealityDeviceManager は Unity の XR.WSA.Input.GestureRecognizer をラップします。
これにより、HoloLens デバイスから Unity のジェスチャーイベントを利用しています。

タッチスクリーンデバイス

UnityTouchController は物理的なタッチスクリーンをサポートする Unity Touch クラスをラップしています。

2つの入力ソースは両方とも Gesture プロファイルで設定します。
Unity のタッチイベントとジェスチャーイベントをそれぞれMRTKの入力アクションに変換します。
このプロファイルは Input タブの Input System Settinges プロファイルにあります。
f:id:bluebirdofoz:20200307230902j:plain

ジェスチャーイベント

ジェスチャーイベントは以下の GestureHandler インターフェイスのいずれかを実装することによって受信されます。
・IMixedRealityGestureHandler
・IMixedRealityGestureHandler
microsoft.github.io

ジェスチャーイベントハンドラーの実装例については後述のサンプルシーンを参照してください。

汎用的なものを実装する場合 OnGestureCompleted および OnGestureUpdated イベントは次のタイプの型付きデータを受け取ることができます。

Vector2

2D位置ジェスチャー。deltaPosition を通知するためにタッチスクリーンで作成されます。

Vector3

3D位置ジェスチャー。HoloLensが作成した以下の情報を取得します。
・操作イベントの cumulativeDelta
・ナビゲーションイベントの normalizedOffset

Quaternion

3D回転ジェスチャー。カスタム入力ソースで使用できますが、既存のソースでは現在作成されていません。

MixedRealityPose

3D位置/回転ジェスチャーの組み合わせ。カスタム入力ソースで使用できますが、既存のソースでは現在作成されていません。

イベントの順序

ユーザー入力に応じて2つの主要なイベントチェーンがあります。

ホールド

1.ホールドタップ
2.HoldStartDuration を超えてホールド
3.リリースタップ
microsoft.github.io

移動

1.ホールドタップ
2.HoldStartDuration を超えてホールド
3.NavigationStartThreshold を超えて手を移動
4.リリースタップ
microsoft.github.io

サンプルシーン

MixedRealityToolkit.Examples\Demos\HandTracking\Scenes の HandInteractionGestureEventsExample シーンを開きます。
これはポインターResultを使用して、ヒット位置にオブジェクトを生成する方法を示しています。

GestureTester スクリプトは、GameObjectsを介してジェスチャーイベントを視覚化する実装例です。
ハンドラー関数はインジケーターオブジェクトの色を変更し、シーン内のテキストオブジェクトに最後に記録されたイベントを表示します。
github.com