ハンド コーチ
ハンド コーチは、システムがユーザーの手を検出しないときに、3D モデル化されたハンドをトリガーします。 この機能は、ジェスチャをまだ学習していないときにユーザーをガイドするために役立つ "ティーチング" コンポーネントです。 ユーザーが指定されたジェスチャを一定の時間内に行わなかった場合、このハンドは遅れてループします。 ハンド コーチを使用して、ボタンを押したりホログラムを持ち上げる動作を表現することができます。
提供されているハンド コーチ
現在のインタラクション モデルは、スクロール、遠くを選択、近くをタップなど、さまざまなジェスチャ コントロールを表現します。 MRTK で提供されている既存のハンド ジェスチャの完全な一覧を次に示します。
近くを選択の例 - ボタンまたは近くの対話可能なオブジェクトを選択する方法を示すために使用します
エアタップの例 - 遠く離れたオブジェクトを選択する方法を示すために使用します
空間内でオブジェクトを移動する例 - 空間内でホログラムを移動する方法を示すために使用します
回転の例 - ホログラムまたはオブジェクトを回転する方法を示すために使用します
スケールの例 - ホログラムを大きくまたは小さくする方法を示すために使用します
パームアップの例 – ハンド メニューを表示するためのお勧めの使い方
ハンド フリップの例 – ハンド メニューを表示する別の方法
スクロールの例 – リストまたは長いドキュメントのスクロールに使用します
設計概念
Hololens2 では、生来の自然な手のジェスチャを基に、手を使った操作を設計しました。 それらは大部分のユーザーにとって直感的であると考えられるため、ジェスチャ専用の学習時間は設けませんでした。 その代わりに、ホログラムの操作で困った場合や操作に不慣れな場合に、ユーザーがこうしたジェスチャを習得することを手助けするハンド コーチを作成しました。 学習時間を取らない場合、操作の実行方法をユーザーに見せることが最適なオプションであると考えました。 ユーザーはジェスチャを理解できたものの、多少のガイダンスが必要なことがわかりました。 ユーザーが一定時間オブジェクトを操作していないことが検出されると、ハンド コーチがトリガーされ、正しい手や指の位置を示します。
直感的
手をアニメーション化する場合、それはわかりやすく混乱を招かないものである必要があります。 手のアニメーションは、ユーザーの理解を助けるジェスチャの表現です。
たとえば、ユーザーにボタンを押してもらいたい場合は、ボタンを押す手がトリガーされます。
宝石への軽いタップを示すハンド コーチ
ハンド スケール
UI メニューでさまざまな手のサイズをテストしたところ、本物の手の大きさにすると、威嚇されるように感じられることがわかりました。 小さすぎると、ジェスチャを確認して理解するのが困難でした。
ボイス オーバーとハンド
ユーザーがボイス オーバーで 1 つの指示セットを聞き取り、同時に別の指示をハンド コーチで見ることができるとは想定しないでください。 感覚的な負荷がかかりすぎないように、指示は、ユーザーが集中しやすく困難を感じないような順序にします。
自作は可能ですか?
はい。 ゲームに使用する独自のジェスチャを作成し、ぜひ、コミュニティに投稿してください。 ご自身のアプリに使用できるリギングされた手の Maya ファイルを用意しました。こちらからダウンロードできます: HandCoach_MRTK.zip のダウンロード
Maya のボックスをつつくアニメーション化された手の例
推奨される作成ツール
多くの 3D アーティストから選ばれているのは、HoloLens の使用に対応した Autodesk の Maya で、これはアセットの画期的な作成方法となっています。 提供されている手のファイルは Maya のバイナリ ファイルであるため、手をアニメーション化してエクスポートするには Maya を使用することをお勧めします。 独自のコントローラー セットアップを作成するために別の 3D プログラムの使用を希望する場合は、.FBX があります。 HandCoachMRTK_FBX.zip のダウンロード
提供されているダウンロード可能な Maya のハンド ファイルを使用する場合は、Unity でハンドを 0.6 にスケールダウンすることをお勧めします。
リギングされた手
技術仕様
- 両手用ファイルは Maya ASCII 形式で使用できます
- 右手と左手は Maya バイナリ形式で使用できます
- Maya ファイルを 24 FPS に設定します
- このファイル内には左手と右手があり、両手または片手のジェスチャに使用できます。 既定では右手のみが表示されます。
- フェードのために最初と最後に約 10 フレームのバッファーを残しておくことをお勧めします
- 指定したターゲットを使用してオブジェクトをアニメーション化する場合は、既定のボックスまたは Null にアニメーション化することをお勧めします。
- ハンドでボックスなどの物理的なオブジェクトをアニメーション化する場合、そのベスト プラクティスとして、Maya 内の平行移動はアニメーション化せず、Unity または Code でアニメーション化することをお勧めします。
- 意味のある情報を伝達するには、表示されるアニメーションは 1.5 秒必要です
- アニメーションに問題がなければ、次のようにします。
- すべてのジョイントを選択し、キー フレームをベイクする
- コントローラーを削除し、ジョイントとメッシュを選択して、FBX としてエクスポートする
- 複数のアニメーションがある場合は、Maya のビルトイン ゲーム エクスポーターを使用できます: https://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2015/ENU/Maya/files/Game-Exporter-htm.html
Maya からのエクスポート
アニメーションに問題がなければ、次のようにします
すべてのジョイントを選択する: [選択] > [階層]
アニメーションをベイクする: [アニメーション] > [キー] > [Bake Animation]に切り替える
コントローラーのリグを削除する: [アウトラインの作成] > [MainR_Grp or MainL_Grp]
FBX としてエクスポートする: JNT とメッシュを選択: [ファイル] > [エクスポートの選択] (オプション ボックス) > [エクスポートの選択]
FBX としてエクスポートし、Unity に取り込む場合は、ハンドを 0.6 にスケールダウンします。 それが手を表示するのに最適なバランスであることがわかりました。
MRTK で表示される HandCoach_R prefab の Unity 設定
Unity プロジェクトにハンドを実装する
ベスト プラクティス
Unity でハンドを 0.6 にスケールダウンすることをお勧めします
ハンドは 2 回再生し、ジェスチャが完了しない場合は完了するまで連続してループする必要があります。 ユーザーがジェスチャの登録と確認を行う時間を確保するために、ハンドは 2 回ループする必要があります。 ハンドはループ間でフェードイン、フェードアウトする必要があります。
ユーザーの手が HL2 カメラで見えていても、ユーザーが必要な操作を行っていない場合、手が表示されるのは 10 秒後です。
ユーザーの手が HL2 カメラで見えていない場合は、5 秒後に手が表示されます。
アニメーションの途中でユーザーの手が HL2 カメラによって視覚的にトラッキングされている場合は、アニメーションが完了してフェードアウトします。
ボイス オーバーを含める場合は、ハンドのジェスチャに対応したものにすることをお勧めします。
少なくとも 1 回ハンドに学習させた場合は、ユーザーの操作が止まっていることが検出された場合にのみジェスチャを繰り返します。
指または手の特定の位置が重要である場合は、アニメーションでそれらの微妙な部分をユーザーがはっきりと確認できるようにします。 最も重要な部分がクリアに表示されるように、手の角度を試してみてください。
手にひずみがある場合は、Unity の品質設定にアクセスして、骨の数を増やす必要があります。 Unity の [編集] > [プロジェクト設定] > [品質] > [その他] > [Blend Weights](ブレンドの重み) にアクセスします。 スムーズなジョイントが表示されるように「4 bones」が選択されていることを確認します。
避けるべきこと
- ハンドのサイズを大きくしすぎる
- 手をユーザーに近づけすぎている
- ハンドは 1 回だけ学習させる必要があります。 過度に学習させると、混乱と乱雑さを招く可能性があります
- Unity に取り込むには、こちらから最新の MRTK をダウンロードしてください: https://github.com/microsoft/MixedRealityToolkit-Unity
- 素材: Teaching_Hand2
- スクリプト: MRTK ハンド コーチの MRTK ガイドラインを参照してください
- プロジェクトごとの設定
- シーンを UWP に設定する: 命令については、「MRTK を使用して 新しい OpenXR プロジェクトを設定 する」の記事を参照してください。