Google Tangoでのアプリ開発

# Introduction

AR_FukuokaでTangoを扱える機会があったので、
早速応募して使ってきた。

最近アウトプットが少ないと思っていたので、超絶タイミングが良い。
AR_Fukuoka最高。

尚、この記事の内容は、
AR_Fukuokaで行われたハンズオンの内容をそのまま記載してます。

興味がある方は是非AR_Fukuokaへ！！

# Tangoを使ってやる事

Unityを使って、タップした所に3Dモデルを置くアプリを作る。

# Environment

 + Phab2 Pro
 + Windows 10
 + Android SDK
 + JDK 1.8.0_121
 + Unity 5.5

# 手順

## 事前準備

 + [ココ](https://developers.google.com/tango/downloads)からUnity用のSDKをダウンロードする。  
 + Unityを起動し、新規プロジェクトを作成する。 
 + Window->AssetStoreを開き表示させるモデルをダウンロード後、Import。
 + AssetsのModelをHierarchyへドラッグ&ドロップしてモデルが使える事を確認する。
 + Assets->Import Package->Custom PackageからTango SDKをImportする。

今回使ったのは[カイル君](https://www.assetstore.unity3d.com/jp/#!/content/4696)  

## まずはTangoSDKに触る

 + Assets内のTangoPrefabsからTangoManagerを見つけて、Hierarchyにドラッグ&ドロップする。
 + 既存のカメラを削除する。
 + Assets内のTangoPrefabsからTango Simple Cameraを見つけてHierarchyへドラッグ&ドロップする。
 + File->Build Settingsを開き環境をAndroidへ変更する。
 + Build SettingsのPlayer Settingsをクリックし、Inspector上で下記設定を変更する。
     + OtherSettings.BuildIdentifer : com.miyatama.tangoapp
     + Default Orientation : Landscape Left
 + Build Settings上でBuild And Run!!

failed to re-package resource.see the console for details
というエラーが出たら、

 + Javaのバージョンを上げる
 + Android SDK 24をアンインストール

ここまで来ると分かる事実。

`後ろに下がらないと見えない!!`

これは、Tango起動時の位置が0,0,0の座標だから。
なので、下記修正を行う

 + カイル君を後ろにずらす
 + HierarchyからTango Simple Camera->Tango Poseをクリックし、InspectorのTrail Rendererのチェックを外す

Tango SDK
## Tango SDKで空間計測を可視化してみる

 + Tango Point CloudをHierarchyへD&D
 + Tango ManagerのInspectorを開き、Enable Depthのチェックを入れる。
 + Tango Point CloudのInspectorを開き、下記点を変更
     + MeshRendererのチェックを入れる。
     + Tango Point Cloud.Update Points Meshのチェックを入れる。
 + Tango Simple Camera->Gesture CameraのInspectorを開きTangoGestureCamera.DefaultCameraModeをTHERD_PERSONへ変更

## ARっぽくしてみる

新規Unityプロジェクトを作成し、`まずはTangoSDKに触る`の手順を終わらせた後。

 + Tango Simple Cameraを削除し、Tango AR Cameraを追加する。
 + Tango ManagerのInspector
     + Enable Video Overlayのチェックを付ける
 + File->Build SettingsからBuild And Run

無事にカイル君が浮いている事を確認したら、
今度はカイル君を地面に立たせる。

 + カイル君にAdd Componentでスクリプトを追加する。
     + スクリプト名 : kylebehavia
 + Assetsのkylebehaviaをダブルクリックしてスクリプトを編集する。

``` csharp:kylebehavia
using System.Collection
using System.Collection.Generic;
using UnityEngine;
using Tango;

public class kylebehavia : MonoBehavior {
  public TangoPointCloud pointCloud;

  void Start(){}

  void Update(){
    if (Input.touchCount > 0){
      Touch t = Input.getTouch(0);
      TouchPhase p = t.phase;
      if ( p == TouchPhase.Began){
        StartCoroutine(FindPlane(t.position));
      }
    }
  }

  private IEnumerator FindPlane(Vector2 touchPosition){
    Camera cam = Camera.main;
    Vector3 pos;
    Plane plane;
    if ( !pointCloud.FindPlane(cam, touchPosition, out pos, out plane)){
      yield break;
    }
    transform.position = pos;
    transform.forward = new Vector3(
      cam.transform.position.x - transform.position.x,
      0,
      cam.transform.position.z - transform.position.z).normalized;
  }
}
```

 + カイル君のInspectorにPoint CloudをD&Dで設定する。
 + File->build settingsからbuild and runをクリック！！

![C5ftAvDUoAAOQ0a.jpg](https://qiita-image-store.s3.amazonaws.com/0/42445/044800b7-4057-6967-104a-d10a8ae1133f.jpeg)

以上です。
お疲れさまでした！！

# 修正履歴

## 2017/02/26

AR_Fukuokaで本内容をご教授いただいた方から"AR Cameraを追加する手順が抜けている"
と、ご指摘を頂く。
恥ずかしいので、こそっと加筆する。