戯言日記

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

Mixed Reality 250 翻訳 第2章

第2章 Interaction

youtu.be

目標

Windows Mixed Reality アプリケーションの入力を扱う方法を示します

ビルドするもの

第一章のアプリ上に基づき,ユーザがHologramsを掴み,HoloLens内で現実世界のサーフェスや,Immersiveデバイス内のバーチャルテーブルの上に置ける機能を追加します

Steps

  • InputManagerの追加

 ・ HoloToolkit > Input > PrefabsからInputManagerをHierarchyにあるManagersの子として置く
 ・ HoloToolkit > Input > Prefabs > Cursor から Cursor を Hierarchyに置く

f:id:haikage1755:20170727204945p:plain

  • Spatial Mappingの追加

 ・HoloToolkit > SpatialMapping > Prefabs から SpatialMapping を Hierarchyに置く

f:id:haikage1755:20170727205124p:plain

  • Virtual Playspaceの追加

 ・Hierarchy で MixedRealityCameraParentを展開し,Playspaceを選択

f:id:haikage1755:20170727205258p:plain

 ・InspectorでPlayspaceのチェックボックスを有効にする

f:id:haikage1755:20170727205234p:plain

 ・AppPrefabsからVRRoomをHierarchyに置く

f:id:haikage1755:20170727205325p:plain

  • WorldAnchorManagerの追加

 ・Hierarchy内で,Managersを選択
 ・Inspectorで,Addcomponentをクリック
 ・World Anchor Manager とタイプする
 ・World Anchor Manager を選択し,追加する

f:id:haikage1755:20170727210124p:plain

  • IslandへのTapToPlace の追加

 ・Hierarchy内で,Islandを展開する
 ・MixedRealityLandを選択する
 ・Inspectorで,Add Componentをクリック
 ・Tap To Place とタイプし,選択する
 ・Place Parent On Tap をチェックする
 ・PlaceGameObjectToPlaceにIslandを指定
 ・Placement Offset に (0, 0.1, 0)をセットする

f:id:haikage1755:20170727205906p:plain

コードを理解する

Script 1 - GamepadInput.cs

Assets\HoloToolkit\Input\Scripts\InputSourcesから,GamepadInput.csを開く。また,同一パス内にある GesturesInput.csもダブルクリックする。
尚,両スクリプトがBaseInputSourceという共通Classを持つことに注目して下さい。

f:id:haikage1755:20170812005540p:plain

BaseInputSourceはInputManagerへの参照を保持することで,スクリプトがイベントをトリガーできるようにします。この場合,InputClicked eventが関連しています。これは第2章でTapToPlaceを追加したときに重要になってきます。GamePadInputの場合,押されるコントローラのAボタンをポーリングし,そしてInputClickedイベントを立ち上げます。GesturesInputでは,TappedEventに反応してInputClickedイベントが立ち上がります。

f:id:haikage1755:20170812010519p:plain
Gamepadの場合

f:id:haikage1755:20170812010608p:plain
Gestureの場合

Script 2 - TapToPlace.cs

Assets\HoloToolkit\SpatialMapping\Scriptsから,TapToPlace.csを開く。Holographic アプリを作成する多くの開発者が最初に実装したいことは,ジェスチャー入力でHologramsを移動することです。そのため,我々はこのスクリプトにコメントを徹底的にするように努めました。このチュートリアルでは,いくつかの注目すべき点があります。
最初に,TapToPlaceがIInputClickHandlerを実装することに注目してください。IInputClickHandlerは,GamePadInput.csまたはGesturesInput.csによって生成されたInputClickedイベントを処理する関数を公開しています。

f:id:haikage1755:20170812011036p:plain
IInputClickHandlerの中身

OnInputClickedは,TapToPlaceを持つオブジェクトにフォーカスがあるときにBaseInputSourceがクリックを検出すると呼び出されます。HoloLensでAirTapをする,あるいはXboxコントローラのAボタンを押したときにイベントをトリガーします。

 次にUpdate内でサーフェスを見ているかどうかを監視しているので,ゲームオブジェクトをテーブルのようなサーフェスに置くことができます。

f:id:haikage1755:20170812013715p:plain

Immersiveデバイスは現実のサーフェスの概念はなく,テーブルトップを表すオブジェクト (Vroom > TableThingy > Cube)には SpatialMapping physics layerがマークされ,Update内のRayはVirtualテーブルトップと衝突します。

f:id:haikage1755:20170812014009p:plain

進捗を楽しむ

 今回は島を移動できるようになりました。HoloLensでは島を実際のサーフェスに従って移動し,Immersiveデバイスでは追加したVirutalテーブルへ移動できます。

[研究者になりたかった青二才の戯言日記]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」