HoloLens 積み木アプリを 10 分で作る手順とコード

<font color="red">(※2017/7/23 更新)</font>
この記事は、参考情報に記載した HoloLens アプリ開発先駆者である @Taka_Yoshinaga さんの HoloLens アプリ開発の公開資料をもとに、ワンシート形式で主な手順をまとめた資料になります。各手順やコード内容はお公開資料に準じておりますので、本記事は手元に置いて確認用の用途や、手順工程確認表の用途などにご利用ください。公開資料には、手順の詳細や補足情報なども記載されていますので、合わせてご覧いただくことをおすすめします。詳細で丁寧な HoloLens アプリ開発資料を公開している @Taka_Yoshinaga さんにはこの場を借りてお礼申し上げます。

#成果物
下記手順で、以下のような成果物が出来上がります。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">HoloLens building blocks Demo <a href="https://t.co/Iqzn1boTog">https://t.co/Iqzn1boTog</a></p>&mdash; HoloDevJP (@HoloDevJP) <a href="https://twitter.com/HoloDevJP/status/887954307747790848">2017年7月20日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

#対象ユーザー
- HoloLens 開発環境を整えている方
- HoloToolKit のシンプルな使い方を確認したい方
- [Holographic Academy](https://developer.microsoft.com/en-us/windows/holographic/academy) にあるチュートリアルを全部終えて、次のステップに進みたい方
- Unity 操作に慣れており、最低限の手順で HoloLens アプリを作りたい方
- 人前でゼロから簡単なHoloLensアプリ実装デモをしたい方

#環境
- Unity 2017.1.0.f3
- Visual Studio 2017

#手順
1. [HoloToolKit-Unity](https://github.com/Microsoft/HoloToolkit-Unity) を DL し unitypackage 化しておく。
2. Unity 3D プロジェクトの作成
3. Asset に HoloToolKit.unitypackage をインポート
4. "Hierarchy" で右クリック [3D Object] - [Cube] を選択、追加
5. 動作確認
6. 移動回転拡大ボタンの説明
7. Cubeを選択:
 1. Position: 0,0,1.2
 2. Scale: 0.15, 0.15, 0.15
8. Asset で右クリック [Create] - [Material]
9. Material を選択して Albedo で色変更
10. Cube を選択 "Material" を展開し Element0 にドラック&ドロップ
11. [Add Component] - [Rigidbody] を選択、追加
12. Unity エディター内の再生ボタンで動作確認 (Camera を Position: 0,0,0 に)
13. Scene を保存 (以後、定期的に保存)
14. Unity エディター内の再生ボタンで動作確認
15. Main Camera を削除
16. Assets フォルダ内で HoloLensCamera を検索、追加
17. Assets で SpatialMapping を検索 SpatialMapping.prefab を追加
18. ~~SpatialMapping を選択 - Room Model 検索ボックスから SRMesh を検索追加~~ (※2017/7/20 更新: HoloToolKitからSRMeshが無くなった)
19. Assets で InputManager を検索 prebab を Hierarchy に追加
20. 動作確認 (Shift を押すとハンドカーソルが表示され AirTap 可能)
21. "Hierarchy" で [Create Empty] を選択、追加
22. GameObject で [Add Component] - [New Script] で RcvAirTap.cs ファイルを作成
23. Assets フォルダ内の RcvAirTap.cs をダブルクリックで VS で表示
 1. IinputClickHandler を作成し Ctrl + . で using と OnInputClicked メソッドが自動的に作成
 2. 後述のコード内容を実装
24. Cube を Assets フォルダにD&D
25. GameObject を選択 Original 変数に Cube をD&D
26. 動作確認 (AirTap でCubeが落ちることを確認)
27. [HoloToolKit] - [Configure] - [Apply HoloLens Capability Settings] - [Spatial Perception] をチェック
28. [File] - [Build Settings] で [Windows Store] をクリックし [Switch Platform]
29. SDK: Windows 10, Target device: HoloLens, 
30. [Player Setting] をクリック、[Inspector] - [Other Settings] の [Virtual Reality Supported] にチェック
31. [File] - [Build Settings] で [Biuld] を実行。任意のフォルダにビルドする。
32. プロジェクト名.sln を Visual Studio で開く
33. HoloLens を USB でPCに接続する
34. Release x86 Device にしてデバッグ実行
35. 実機デモ (成果物参照)

#コード内容
以下のコードを上記手順 23-2. の際に実装します。

```
using HoloToolkit.Unity.InputModule;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class RcvAirTap : MonoBehaviour, IInputClickHandler{

    //Cube Prefab を扱う変数
    public GameObject original;

    //AirTapされたときに呼び出される関数
    public void OnInputClicked(InputClickedEventData eventData)
    {
        //throw new NotImplementedException();

        //Cube Prefab の情報を用いて実体化
        GameObject cube = GameObject.Instantiate(original);
        //自分からみて前方1.2mの位置を空間内の位置に変換
        cube.transform.position = Camera.main.transform.TransformPoint(0, 0, 1.2f);
    }

    // Start関数は初期化のために一度だけ実行される
    void Start () {
        //AirTap の通知が gameObject に渡るように設定
        InputManager.Instance.PushFallbackInputHandler(gameObject);		
    }
    // Update は毎フレーム毎実行される
    void Update () {	
    }
}
```

#参考情報
上記手順まとめは、次の@Taka_Yoshinaga さんの公開資料をもとに作成しています。各資料ともスクリーンショットとともに丁寧な解説が記載されていますので参照してください。

![image](https://qiita-image-store.s3.amazonaws.com/0/156393/987ef864-abcf-d7db-e2ca-0f0308daf721.png)
[ARコンテンツ作成勉強会：HoloLensハンズオンvol.2(AirTap編)](http://www.slideshare.net/ssuserc0d7fb/arhololensvol2airtap) By @Taka_Yoshinaga さん

また、HoloLens アプリ開発環境セットアップに関する詳細や、アプリ開発の導入に関しては  @kaorun55 さんが詳細な資料を公開していらっしゃいますので、合わせて参照してください。

[HoloLensハンズオン(セットアップ) - HoloLens アプリ開発環境セットアップ](https://docs.com/kaorun55/7926/hololens?c=euXVvL) By @kaorun55 さん
[HoloLensハンズオン(ショート) - 45分でHoloLensアプリ開発](https://docs.com/kaorun55/8719/hololens?fromAR=1) By @kaorun55 さん