HoloLens MixedRealityToolkit-Unity GazeRuler

こんにちは、ナレコム前川です!

今回は、MixedRealityToolkit のGazeRuler をご紹介します。
MixedRealityToolkit の導入方法について コチラ で説明しているので、導入をしていない方は参照してください。

GazeRuler

GazeRulerとは、空間の距離や面積を測定する際に使用できるプロジェクトです。
これは、視線と空間マッピングに基づいています。

それでは、実際に GazeRuler を体験してみましょう。

Build Settings が開いている場合は閉じてください。

まず、[Project] パネルから [HoloToolkit-Examples] 内にある [GazeRuler] を選択してください。
選択したら、[Scenes] -> [GazeRulerExample] シーンの順に選択し、開いてください。

次に、[Hierarchy] パネルから [Measure Manager] を展開し、選択してください。

[Measure Manager] は、測定に関する全ての管理を行います。

スクリプトは、[Project] パネルの [Assets] -> [HoloToolkit-Examples] -> [GazeRuler] -> [Scripts]にある
[Measure Manager] を使用しています。
また、線やポリゴンの管理を行うスクリプトも 同じ [Scripts] フォルダ内にあるので確認してください。

[Inspector] パネルで [Measure Manager] を確認してください。
ここでのプレハブについて以下で説明します。

  • [Mode] では、線や円、多角形など測定に用いるものを設定しています。
  • [Line Prefab] は、[HoloToolkit-Examples] -> [GazeRuler] -> [Prefab] 内からプレハブを持ってきています。
    これは、測定を行う際に表示される直線のプレハブです。
  • [Point Prefab] は、上記の [Prefab] フォルダ内から持ってきています。
    これは、測定の際の直線の両端に表示される点のプレハブです。
  • [Mode Tip Object] では、[Hierarchy] パネル内の [ModeTip] を持ってきています。
    このオブジェクトによって、直線の測定と面積の測定の切り替えができます。
  • [Text Prefab] では、”Line” と ”Point” 同様の [Prefab] フォルダからプレハブを持ってきています。
    これは、アプリケーションを立ち上げたときやモードを切り替えた時に文字を表示させるプレハブです。

続いて、[Hierarchy] パネルで [SpatialMapping] を選択してください。
[Inspector] パネルで複数のスクリプトがあることが確認できると思います。

[SpatialMapping] では、周囲の環境の認識を行います。

スクリプトについて説明していきます。

[Spatial Mapping Observer] スクリプトでは、
環境スキャンの役割を行う SurfaceObserver の管理を行っています。
このスクリプトは、[Assets] -> [HoloToolkit] -> [SpatialMapping] -> [Scripts] 内にあります。

[Spatial Mapping Manager] スクリプトでは、
環境スキャンの役割を行う SurfaceObserver や格納された SpatialMapping の Mesh データを使うことを許可します。
また、Mesh データ をアプリケーションが読み込む際には、SurfaceObserver を停止させたり、
リアルタイムで SpatialMapping を更新したりします。
このスクリプトも上記の [Scripts] フォルダ内にあります。

[Object Surface Observer] スクリプトでは、
周囲の環境をスキャンし、物体を読み込みます。
このスクリプトについても、同様に上記の [Scripts] フォルダ内にあります。

次に、[Hierarchy] パネルにある [InputManager] は、
[Project] パネルの [Assets] -> [HoloToolkit] -> [Input] -> [Prefab]にある
[InputManager] プレハブを使用しています。

前回の ColorPicker の記事で詳しく説明していますが、
[InputManager] では、視線やジェスチャーによる入力の管理を行っています。

続いて、[InputManager] の下にある [Input] を展開して、選択してください。
[Input] の配下に [CursorWithFeedback] があるのを確認できると思います。
この [CursorWithFeedback] は、[HoloToolkit] -> [Input] -> [Prefabs] -> [Cursor] 内にあります。

これは、ユーザーの視線やジェスチャーをフィードバックするカーソルです。

最後に、[Hierarchy] パネルにある [HoloLensCamera] を展開して、選択してください。
このオブジェクトは、[Project] パネルの [HoloToolkit] -> [Input] -> [Prefabs] 内にあるプレハブを持ってきてあります。

アプリケーションをエミュレーターや Unity 上で実行する際、子オブジェクトである [GazeControls]
マウスやキーボード、ジョイスティックなどから視線を操作できるようにしています。

それでは、実行してみましょう。

配置とビルド

次に配置とビルドを行います。
配置とビルドに関しては、HOLOLENS 5つのビルド方法を参照してください。

ビルドをする際に、GazeRuler シーンを追加し、GazeRuler シーンのみチェックしてください。

※Unity から Build Settings を行う際に、Player Settings の [Other Settings] や [Public Settings] で
必要項目がチェックされているか確認してください。
[Other Settings] では、きちんと [Virtual Reality Supported] にチェックがしてあるか確認してください。
[Public Settings] では、
 ・InternetClient
 ・InternetClientServer
 ・Microphone
 ・SpatialPerception
にチェックが入っていることを確認してください。

実行後、長さを測定したい物体の両端をタップすると、物体の長さが表示されます。
また、面積を測りたい場合には、「Chage mode」と発音してからタップで点を繋ぎ、
「Close」と発音すると面積が表示されます。
「Change mode」では、長さと面積で測るものを切り替えることができます。
測定したものを消したい場合は「Remove」と発音してください。
全て削除したい場合は、「Remove all」と発音すると、
現在のモードに対応するものは全て削除されます。

また、面積を測るときに面積の数値表示が裏表逆になってしまいました。。
これは、時計回りにタップしていくと逆にならないみたいです!
実行動画でも実際に試してみてるのでぜひ見てください。

実行動画はこちらです。

これで、GazeRuler については以上です。
お疲れ様でした。

他のサンプルはこちら↓↓↓

この記事を書いた人

azure-recipe-user