デコシノニッキ

ホロレンジャーの戦いの記録

MR Learning Base Module で学ぶHoloLens 2アプリ開発 その5 高度な入力

※ この記事は2019/02/26時点のものを参考に書いています

www.tattichan.work

4ではインタラクションが加わりアプリっぽくなりました
最後に音声コマンドや,Pan操作,Holo2の目玉機能のアイトラッキングについてやっていきます

Instruction

ボイスコマンドを有効にする

このセクションでは2つの音声コマンドを実装します。フレームレートを表示する"Diagnostics(診断)"の描画切り替えと音声コマンドで音を再生する機能です。 音声コマンドの設定から始めます。

1.シーンの"MixedRealityToolkit"を選択し,InspectorパネルからInput System Settingsを見つけます。ダブルクリックして,"Input System Profile"を開きます。Lesson1でやったように,InputSystemProfileを編集可能にします。

InputSystemProfileには様々な設定があり,音声コマンドを編集する場合は"Speech Command Settings"に移動します。


f:id:haikage1755:20190502023741p:plain:w450

Lesson1で説明したように,VoiceCommandProfileを複製して編集可能にします。AudioCommandProfileをダブルクリックすると様々な設定が表示されます。詳細はこちら

Note: デフォルトでは自動起動ですが,手動起動にも変更できます。この例では自動機能のままにしておきます。MRTKにはデフォルトの音声コマンドがいくつかあり,”Menu”,"Toggle Diagnostics","Toggle Profiler"などがあります。今回は"Toggle Diagnostics"を使います。また次の手順で新しい音声コマンドも追加していきます。


f:id:haikage1755:20190502024321p:plain:w450

3.新しい音声コマンドを追加します。”+ add a new speech command”を押して新しい音声コマンドを追加でき,追加するとボタンの下のコマンドの一覧に追加されるのを確認できます。使用したいボイスコマンドを入力します。今回のサンプルでは"Play Music"コマンドを使用します。

Tip: 音声コマンドをキーから発火することもできます。

4.音声コマンドに応答する機能を追加します。”Manipulation Handler”などのスクリプトがアタッチされていないオブジェクトを選択し,InspectorからAdd Componentで"Speech Input Handler"を追加します


f:id:haikage1755:20190502024939p:plain:w450

デフォルトでは,2つチェックボックスが確認できるはずです。1つは"Is Focus Required"で,Gazeやコントローラのレイが当たっている間音声コマンドが発火できます。このチェックボックスを切ると,ユーザは音声コマンドを利用する際にそのオブジェクトを見なくとも使えるようになります。

5.音声コマンドに応答する機能を追加します。“+”ボタンを押して,応答したいキーワードを選びます。


f:id:haikage1755:20190502025438p:plain:w450

6."Keyword"の隣のドロップダウンリストから"Toggle Diagnostics"を選択します。これにより,ユーザが”Toggle Diagnostics”と語句を言うたびにアクションが起動します。


f:id:haikage1755:20190502025501p:plain:w450

7.フレームレートカウンターのオンオフを切り替える"Diagnostics Demo Control"スクリプトを追加します。このスクリプトはどのオブジェクトにも追加できますが,話を簡単にするためにSpeechInputHandlerと同じオブジェクトに追加します


f:id:haikage1755:20190502025941p:plain:w450

8.SpeechInputHandlerに新しい応答を追加します。"Response()"のセクションから"+"ボタンを押します


f:id:haikage1755:20190502030058p:plain:w450

9.Diagnostics Demo Controlを今作った新しい応答にドラッグします


f:id:haikage1755:20190502030202p:plain:w450

10.ここで"No Function"のドロップダウンリストからDiagnostics Demo Control>"On Toggle Diagnostics()"を選択します。これでDiagnosticsのオンオフを切り替えできるようになりました

次にOctaオブジェクトを使って音声コマンドからオーディオファイルを再生する機能を追加します。

11.Octaオブジェクトを選択してください

12.OctaオブジェクトにSpeechInputHandlerを追加します

13."Toggle Diagnostics"の代わりに”play music”を選択します


f:id:haikage1755:20190502030641p:plain:w450

14.Step8,9のように新しい応答を追加し,Octaを空のフィールドにドラッグします

15."No Function"のドロップダウンリストから"AudioSource">"PlayOneShot"を選択します


f:id:haikage1755:20190502030822p:plain:w450

16.AudioClipには,Lesson4と同じAudioClipを使用します。Projectパネルから"MRTK_Gem"を探してAudioSourceスロットにドラッグします。これで音音声コマンド "toggle diagnostics"に応答してフレームレートカウンターパネルを切り替え, "play music"してMRTK_Gemを再生することができるはずです。

The Pan Gesture

スクロールにも便利なPanジェスチャの使い方を学びます。Panジェスチャを使ってオブジェクトを回転したり,2D UIをスクロールしたりできます。Panジェスチャを使ってテクスチャをワープする方法を学びます。また3Dオブジェクトのコレクションを移動する方法もやっていきます。

1.Quadを生成します。ヒエラルキーで右クリックし,3DObject>Quadを選択します


f:id:haikage1755:20190502031501p:plain:w450

2.必要に応じてQuadを再配置します。この例では,x = 0、y = 0、z = 1.5に設定します。

3.マテリアルをQuadに適応します。このマテリアルはPanジェスチャを使ってスクロールされるマテリアルになります


f:id:haikage1755:20190502031704p:plain:w450

4.Projectパネルから,"pan content"を検索し,マテリアルをQuadにドラッグします

Panジェスチャを使用するには,Colliderが必要になります。QuadにはすでにMeshColliderがありますが,非常に薄く選択が難しいため理想できではありません。BoxColliderに置き換えることを推奨します。

5.MeshColliderを右クリックしてRemoveComponentを押します


f:id:haikage1755:20190502032025p:plain:w450

6.Add ComponentからBoxColliderを追加します。デフォルトのBoxColliderは小さすぎるのでEditColliderボタンを押して編集します。この例ではQuadの少し後ろまで拡張します。シーンエディタでBoxColliderを後ろからドラッグします。これにより,ユーザは自部の指だけではなく手全体でスクロールすることもできます。


f:id:haikage1755:20190502032349p:plain:w450

7.インタラクティブにするために"Near Interaction Touchable"コンポ―ネントをAddCompinentから追加します

8.Panジェスチャーを認識する機能を追加します。Add Componentから"Hand Interaction Pan"を追加します。Hand RayとIndex Fingerの選択肢がありますが,Index Fingerを使います。


f:id:haikage1755:20190502032824p:plain:w450

f:id:haikage1755:20190502032832p:plain:w450

9.HandInteractionPanでは,"Lock Horizontal"と"Lock Vertical"で動きを制限します。Wrap TextureはテクスチャがPanの動きに従うようにします。この例ではオンにします。チェックを有効にしなければ,"VelocityActive"も有効でなければPanジェスチャが機能しません。これもオンにしてください。これでPan対応のQuadができました。

続いて3Dオブジェクトです。

10.Quadオブジェクトを右クリックし,"3DObject">"Cube"を選択します。x = 0.1、y = 0.1、z = 0.1になるように拡大縮小します。このCubeを3回コピーし,均等に配置します。


f:id:haikage1755:20190502033421p:plain:w450

11.Quadをもう一度選択して,PHandInteractionPanで,各CubeにPanアクションを設定します。"Pan Event Receive"の下に,イベントを受信するオブジェクトの数を指定します。4つあるので4と入力してEnterキーを押します。


f:id:haikage1755:20190502033755p:plain:w450

12.各Cubeを空のフィールドに入れていきます


f:id:haikage1755:20190502033835p:plain:w450

13.全てのCubeに"Move With Pan"を追加します。これを行うにはControlを押したまま各オブジェクトを選択します。次にInspectorパネルでAdd Componentを押し,"Move With Pan"を検索して選択します。これで3DオブジェクトはPanジェスチャで動きます。QuadのMeshRendererを削除すると3DオブジェクトのリストをPanできる目に見えないQuadが表示されます。

アイトラッキング

この章では,アイトラッキングを有効にする方法を学びます。注視している間,3Dメニュー項目をゆっくり回転させます。

1.アイトラッキング機能を追加するには,MRTKドキュメントで概説されている"アイトラッキングに必要なプロファイルの設定"に従ってください。
GazeProviderでアイトラッキングを有効にしたり,Unityエディタでアイトラッキングのシミュレーションを有効にするなど,上記のドキュメントリンクの手順に従って設定してください。

リンクでは以下の簡単な説明をします

  • MRTKプロファイルで使用するための視線データプロバイダーの作成
  • Gaze Providerでアイトラッキングを有効にする
  • エディタでアイトラッキングをシミュレートするための設定
  • 構築したアプリケーションでアイトラッキングを可能にするためのVisual Studioソリューションの機能の編集

2.Eye Tracking Targetコンポーネントをターゲットのオブジェクトに追加します。オブジェクトが視線イベントに応答できるようにするには,視線を使用してインタラクションしたい各オブジェクトにEyeTrackingTargetコンポーネントを追加する必要があります。このコンポーネントを,グリッドコレクションの一部である9つの3Dオブジェクトのそれぞれに追加します。


f:id:haikage1755:20190502034939p:plain:w450

3.次に,EyeTrackingTutorialDemoを追加します。EyeTrackingTutorialDemoはチュートリアルの一部でありMRTKには含まれていません。GridCollection内の各3Dオブジェクト毎に,Add Componentから"EyeTrackingTutorialDemo"を追加します


f:id:haikage1755:20190502035210p:plain:w450

4.ターゲットを見るとオブジェクトが回転するようにします。EyeTrackingTargetコンポーネントの"While Locking At Target"セクションに新しいフィールドを追加します


f:id:haikage1755:20190502035403p:plain:w450

f:id:haikage1755:20190502035416p:plain:w450

新しく作成したフィールドにGameObjectを追加していき,EyeTrackingTutorialDemo>RotateTarget()を選択します。これで3Dオブジェクトは,アイトラッキングで注視されている間,回転するように設定されました。

5.注視されているオブジェクトを選択したときの"Blip target"を追加します。EyeTrackingTutorialDemo > BlipTarget()をEyeTrackingTargetコンポーネントの”On Select()”フィールドに割り当てることでトリガーします。これが設定されていると,AirTapや音声コマンド”Select”などの選択アクションをトリガーした時に,ゲームオブジェクトがわずかに動くのが分かります。


f:id:haikage1755:20190502040226p:plain:w450

6.HoloLens 2で動作させる前に,アイトラッキング機能が正しく設定されていることを確認してください。これを書いている時点では,Unityにはまだ視線入力を設定する機能がありません。HoloLens 2でアイトラッキングを機能させるには,この機能を設定する必要があります。視線入力機能を有効にするには,MRTKのドキュメントで次の手順に従ってください。

[デコシノニッキ]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」