第2章 Interaction
目標
Windows Mixed Reality アプリケーションの入力を扱う方法を示します
Steps
- InputManagerの追加
・ HoloToolkit > Input > PrefabsからInputManagerをHierarchyにあるManagersの子として置く
・ HoloToolkit > Input > Prefabs > Cursor から Cursor を Hierarchyに置く
- Spatial Mappingの追加
・HoloToolkit > SpatialMapping > Prefabs から SpatialMapping を Hierarchyに置く
- Virtual Playspaceの追加
・Hierarchy で MixedRealityCameraParentを展開し,Playspaceを選択
・InspectorでPlayspaceのチェックボックスを有効にする
・AppPrefabsからVRRoomをHierarchyに置く
- WorldAnchorManagerの追加
・Hierarchy内で,Managersを選択
・Inspectorで,Addcomponentをクリック
・World Anchor Manager とタイプする
・World Anchor Manager を選択し,追加する
- IslandへのTapToPlace の追加
・Hierarchy内で,Islandを展開する
・MixedRealityLandを選択する
・Inspectorで,Add Componentをクリック
・Tap To Place とタイプし,選択する
・Place Parent On Tap をチェックする
・PlaceGameObjectToPlaceにIslandを指定
・Placement Offset に (0, 0.1, 0)をセットする
コードを理解する
Script 1 - GamepadInput.cs
Assets\HoloToolkit\Input\Scripts\InputSourcesから,GamepadInput.csを開く。また,同一パス内にある GesturesInput.csもダブルクリックする。
尚,両スクリプトがBaseInputSourceという共通Classを持つことに注目して下さい。
BaseInputSourceはInputManagerへの参照を保持することで,スクリプトがイベントをトリガーできるようにします。この場合,InputClicked eventが関連しています。これは第2章でTapToPlaceを追加したときに重要になってきます。GamePadInputの場合,押されるコントローラのAボタンをポーリングし,そしてInputClickedイベントを立ち上げます。GesturesInputでは,TappedEventに反応してInputClickedイベントが立ち上がります。
Gamepadの場合
Gestureの場合
Script 2 - TapToPlace.cs
Assets\HoloToolkit\SpatialMapping\Scriptsから,TapToPlace.csを開く。Holographic アプリを作成する多くの開発者が最初に実装したいことは,ジェスチャー入力でHologramsを移動することです。そのため,我々はこのスクリプトにコメントを徹底的にするように努めました。このチュートリアルでは,いくつかの注目すべき点があります。
最初に,TapToPlaceがIInputClickHandlerを実装することに注目してください。IInputClickHandlerは,GamePadInput.csまたはGesturesInput.csによって生成されたInputClickedイベントを処理する関数を公開しています。
IInputClickHandlerの中身
OnInputClickedは,TapToPlaceを持つオブジェクトにフォーカスがあるときにBaseInputSourceがクリックを検出すると呼び出されます。HoloLensでAirTapをする,あるいはXboxコントローラのAボタンを押したときにイベントをトリガーします。
次にUpdate内でサーフェスを見ているかどうかを監視しているので,ゲームオブジェクトをテーブルのようなサーフェスに置くことができます。
Immersiveデバイスは現実のサーフェスの概念はなく,テーブルトップを表すオブジェクト (Vroom > TableThingy > Cube)には SpatialMapping physics layerがマークされ,Update内のRayはVirtualテーブルトップと衝突します。