HoloLens の GGV を Unity Editor で再現する方法 ( MRTKv2-Release )

# はじめに
MRTKv2 を使って、HoloLens (1st gen) 向けのアプリケーションを動かしてみたので、その際の GGV のシミュレート方法 (Unity Editor) についてまとめます。

## GGV とは!?
HoloLens (1st gen) で使用可能な入力方法の頭文字を取った造語です。※ HoloLens (1st gen) の基本操作モデル。

__G__ aze ( 視線入力 / ※ Head Gaze)
__G__ esture ( ジェスチャー )
__V__ oice ( 音声入力 )

#DefaultHoloLens1ConfigurationProfile
MRTKv2 の設定は、プロファイルを用いて行うことができます。標準プロファイルはそのままでは編集できないので、__[ Copy & Customize ]__ / __[ Create new Profiles ]__ を用いて、個別にカスタマイズする必要があります。Unity Editor 上で、HoloLens (1st gen) の入力 (GGV) をエミュレートする場合は、__「DefaultHoloLens1ConfigurationProfile」__ という標準プロファイルを使用します。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/09/03/10862/21dd76aa-0c2d-4963-a4e0-3fdb4e897dc9.png" width="550">

Editor 上での 入力方法のエミュレートは、以下項目より設定が可能となっています。
__MRTKv2 Profile > [Input] > [Input Data Providers] > [Input Simulation Service] > [Hand Simulation]__

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/09/03/10862/a713bd0d-6137-4596-bad3-c5fa931fe346.png" width="550">

〈 選択リスト 一覧 〉

- Disabled ( 入力の無効化 )
- __Gestures ( Air Tap & Head-Gaze )__
- __Articulated ( Touch )__

HoloLens (1st gen) のエミュレートを行いたい場合は「Gestures」、HoloLens 2 のエミュレートを行いたい場合、「Articulated」を選択してください。( ※ 詳しくは、[公式ドキュメント](https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/InputSimulation/InputSimulationService.html#hand-simulation)をご覧ください。)

# Unity Editor 上での動作検証

### Hand Simulation Mode ー [ Gestures ]
プロファイルにて [ Hand Simulation Mode : Gestures ] を設定すると、HoloLens 1 の入力 ( Head Gase & Air Tap ) をエミュレートすることができます。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/09/03/10862/aaac5f31-b523-4b68-8d19-aa59d10b527a.gif" width="550">


### Hand Simulation Mode ー [ Articulated ]
プロファイルにて [ Hand Simulation Mode : Articulated ] を設定すると、HoloLens 2 の入力 ( Hand Ray & Touch & Grasp ) をエミュレートすることができます。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/09/03/10862/7d314959-de93-4f38-9844-66e0ca4fc0fb.gif" width="550">

HoloLens 2 が無くてもアプリケーション開発が可能なので非常に便利です！


# MRTKv2 での Input System について
Microsoft UX Designer の Yoon さんが [MRTKv2 Input ( Overview )](https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/Input/Overview.html) のインフォグラフィックスを日本語訳してくださっています。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/MRTK?src=hash&amp;ref_src=twsrc%5Etfw">#MRTK</a> Input Systemのインフォグラフィック、日本語のバージョンです。<a href="https://twitter.com/hashtag/MixedRealityToolkit?src=hash&amp;ref_src=twsrc%5Etfw">#MixedRealityToolkit</a> <a href="https://twitter.com/hashtag/HoloLens?src=hash&amp;ref_src=twsrc%5Etfw">#HoloLens</a> <a href="https://twitter.com/hashtag/HoloLens2?src=hash&amp;ref_src=twsrc%5Etfw">#HoloLens2</a> <a href="https://twitter.com/hashtag/TMCN?src=hash&amp;ref_src=twsrc%5Etfw">#TMCN</a> <a href="https://t.co/qbcxNGvquD">https://t.co/qbcxNGvquD</a> <a href="https://t.co/9TueJcr4jj">pic.twitter.com/9TueJcr4jj</a></p>&mdash; Dong Yoon Park (@cre8ivepark) <a href="https://twitter.com/cre8ivepark/status/1148752794121150464?ref_src=twsrc%5Etfw">July 10, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## MRTKv2 で GGV を取り扱う方法を調査
ここからは、HoloLens (1st gen) の GGV を MRTKv2 を活用して取得する方法を調査していきたいと思います。MRTKv2 を使って GGV を取得する方法は、以下2つの方法が存在します。

__1. インタフェースを実装する__ ( ex. IMixedRealityInputHandler.cs )
__2. 既存の Handler をアタッチする__ ( ex. Interactable.cs )

---

### 1. インターフェースを実装する
1つ目は、MRTK内で定義されているインターフェースを実装する方法です。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/09/03/10862/369b1d09-51cf-44f1-affe-77cb5f909a1a.png" width="550">

### 2. 既存の Handler をアタッチする
2つ目は、MRTK内に含まれるハンドラーを対象オブジェクトにアタッチする方法です。GameObjet に フォーカスが当たった時/押された時などのアクションをGUIを使って設定することが可能です。ノンコーディングでここまで出来るのは凄いですね。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/09/03/10862/8bee66b8-3c65-412b-910d-115dd490e422.png" width="550">

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/09/03/10862/02a42aaa-4dff-41f9-9681-f21807a0a0d0.png" width="550">



# おわりに
HoloLens 1 が日本に上陸した際には、MR&HoloLens について何も知らず、Unity が少し触れる程度でしたが、HoloLens 2 のリリースに向けて、このように先行的に技術検証に取り組めている環境は非常にありがたいなと思います。関西だと、実際 HoloLens の開発に携わっていらっしゃる方もまだ少ないですが、アウトプットを通じてMRに興味を持って下さるエンジニアの方が少しでも増えれば幸いです。最後までお読みいただき、ありがとうございました。