ARCoreを簡単にUnityで始める

# はじめに　#
こんにちは。[Life is Tech! Tokai Mentors Advent Calendar 2018](https://qiita.com/advent-calendar/2018/lit-tokai-mentors)の７日目は、自分**だす**が書かせてもらいます。

VRやらARすごく来てますよね。ポケモン:hamster:を捕まえたり、自分の部屋でアイドル:dancers:が踊ったり、夢が広がりまくりですね〜！！

で、最近ARCoreに触れる機会があってその手軽さに感動したので、共有したいと思います。
細かいこと抜きに、なんとなくARやってみたいなーって思った人とかに向けて書きます。

# ARCoreを簡単にUnityで始める #
## ARCoreとは？ ##
ARCoreは、Googleが提供するAR（拡張現実）環境を構築するためのプラットフォームです。ちなみに、AppleがiOS用に提供しているのがARKitです。

## ARCoreができること ##
- モーショントラッキング
- 水平・垂直の表面の検出
- 環境光推定
- Augmented Images（マーカー画像認識）
- Cloud Anchor（AR空間の共有）

## この記事でやること ##
この記事では、UnityにARCoreを導入して、モーショントラッキングとARで検出した平面に衝突判定を付けるところまでやります。
ここまで用意すれば、あとはここにオブジェクトを置くだけでも楽しそうですよね。

## 環境 ##
- Unity Ver.2018.2.14f1
- [ARCore Ver.1.5.0](https://github.com/google-ar/arcore-unity-sdk/releases)

## 導入 ##
### 準備 ###
[ARCore](https://github.com/google-ar/arcore-unity-sdk/releases)をダウンロードして、自分でわかるところに置いといてください。
### その１　プロジェクト作成 ###
まず、プロジェクトを新規作成して、Assets → Import Package → Custom PackageからARCoreのパッケージをインポートしてください。
<img width="1244" alt="スクリーンショット 2018-12-06 20.56.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/323458/a5fb3c35-33f4-d686-ea97-9df2c709d553.png">

### その２　カメラとライト ###
Sceneを開いたら中に入ってるカメラとライトは全部消してください。
代わりに、GoogleARCore → PrehabsにあるARCore DeviceとEnvironment Lightを入れてください。
<img width="1354" alt="スクリーンショット 2018-12-06 21.01.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/323458/d732a6d2-40f8-e6cf-ae15-9b63b5f57810.png">
<img width="1354" alt="スクリーンショット 2018-12-07 0.15.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/323458/bc7c5c38-3273-ca14-8d3d-00ea1741e588.png">
<img width="1354" alt="スクリーンショット 2018-12-07 0.15.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/323458/06aed00f-ad40-e550-d36c-db08094f023d.png">

ScenesにCreateからGoogleARCore → SessionConfigを追加してください。
そして、ARCore DeviceのSession Configに置いてください。
<img width="1243" alt="スクリーンショット 2018-12-07 2.57.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/323458/69c7b500-e7a6-4514-9862-c9ff2e0eac5b.png">
<img width="1354" alt="スクリーンショット 2018-12-07 0.17.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/323458/b1abc4ec-9ba0-0015-397a-951c6b25b12e.png">

### その３　Controller ###
次に、Controllerという名前でGameObjectを作成。
そこに、Add ComponentよりDetected Plane Generatorを追加します。
そして、そのDetected Plane Prefabという項目に、GoogleARCore → Examples → Common → PrefabsのDetectedPlaneVisualizerを置きます。
<img width="1244" alt="スクリーンショット 2018-12-07 3.20.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/323458/e933d1af-8a56-8bd5-1f74-0d6f4f22071a.png">
<img width="1354" alt="スクリーンショット 2018-12-07 0.25.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/323458/baafa326-a82a-d9ea-0780-fdc9b75c9efb.png">

### その４　コード ###
最後に、DetectedPlaneVisualizer.csに数行コードを加えます。

```c#:DetectedPlaneVisualizer.cs
private void _UpdateMeshIfNeeded()
{
//---------------省略---------------//
//平面のメッシュにコライダーを加えるコード
GetComponent<MeshCollider>().sharedMesh = null;
GetComponent<MeshCollider>().sharedMesh = m_Mesh;
}
```

<img width="1354" alt="スクリーンショット 2018-12-07 0.32.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/323458/ced5c344-d2c3-4513-57ca-2beb0280a904.png">

### その５　ビルド ###
ビルド設定は、Androidを選択します。
Other Settingsより、Multithreaded Renderingチェックを外し、Minimum API LevelをAndroid7.0以上にします。
XR Settingsより、ARCore Supportedのチェックを入れます。
<img width="1244" alt="スクリーンショット 2018-12-07 3.43.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/323458/3a7aef35-5719-489b-c04a-139fcc2b82a1.png">

### 完成！ ###
これだけで終わりです！
実行してみて壁や床を検出してたら完成です！
あとは自由に作りましょう！
![Screenshot_1544112403.png](https://qiita-image-store.s3.amazonaws.com/0/323458/99672a2b-52e2-406b-de95-6727797f00f1.png)

## 楽しい! ##
自分は、ここにピンを並べてボールを転がすコードを足して、ARボーリングができました!
現実世界に表示できるってだけでかなり楽しい！
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ARボーリング <a href="https://t.co/UNj5GBo9OL">pic.twitter.com/UNj5GBo9OL</a></p>&mdash; SSSS.だす (@dasuna1201) <a href="https://twitter.com/dasuna1201/status/1070790475924221952?ref_src=twsrc%5Etfw">2018年12月6日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 終わりに #
自分でもこんな簡単にAR開発を始めれると思ってなかったんで、ぜひ皆さんも体験してみてください。そして、ヴァーチャル世界に進出していきましょう。