Unityでお手軽AR開発！vuforiaを使ってみる

**(2018/06/17追記)
今更ですが、Unity 2017.2 以降Vuforiaが正式にサポートされていますので、合わせて本記事を更新しました。**

# vuforiaとは？

vuforiaは、Qualcommにより提供されているAR開発をサポートするライブラリです。
Unity, iOS, Android向けに提供されていますが、開発の簡単さからUnityが使われることが多いです。
基本的に無料で利用することができます。

# vuforiaをUnityで使用できるようにする
次の手順で準備します。

1. vuforiaにデベロッパー登録をする
2. ライセンスキーを登録する
3. データベースを生成し、ARマーカーの情報を登録する
4. vuforia SDKと手順3で作成したデータベースのパッケージをダウンロードし、Unityプロジェクトにインポートする

### 1. vuforiaにデベロッパー登録をする
[vuforia Developer Portal](https://developer.vuforia.com/)にアクセスし、右上のRegisterからアカウント作成を行います。
入力フォームに必要な情報を入力すれば完了です。
![vuforia.PNG](https://qiita-image-store.s3.amazonaws.com/0/83524/419ab104-3ba0-957b-df3c-51d3bdb118c0.png)

### 2. ライセンスキーを登録する
手順1で作成したアカウントでログインしている状態で「Develop」→「Add License Key」の順にクリックします。
![スクリーンショット 2016-09-30 17.05.19.png](https://qiita-image-store.s3.amazonaws.com/0/83524/44a398c2-dfd3-d458-8735-22b90f44d028.png)

まず、vuforiaを使用するアプリケーションが開発・検証用のものか、コンシューマーもしくはエンタープライズ向けのものかの選択をします。ここの選択肢によっては料金が発生します。
試しに使ってみる程度であればDevelopmentを選びましょう。
![スクリーンショット 2016-09-30 17.10.37.png](https://qiita-image-store.s3.amazonaws.com/0/83524/043938d6-d498-f84e-488c-5d0aabff1e48.png)

選択した後、開発するアプリケーションの情報を入力すると、License Managerにアプリケーションの情報が追加されます。
![スクリーンショット 2016-09-30 17.52.13.png](https://qiita-image-store.s3.amazonaws.com/0/83524/948d171f-fa88-5f3f-7e51-506be025d54e.png)

作成したアプリケーション名のリンクをクリックすると、下の黒く塗りつぶした領域にライセンスキーが表示されます。
このライセンスキーを後にUnityでの開発で使用します。
![スクリーンショット 2016-09-30 17.43.07.png](https://qiita-image-store.s3.amazonaws.com/0/83524/96ad0b01-a9c2-8c99-20c3-58bde54302a0.png)

### 3. データベースを生成し、ARマーカーの情報を登録する

[vuforia Developer Portal](https://developer.vuforia.com/)で「Develop」→「Target Manager」の順にクリックし、Target Managerを開きます。
「Add Database」をクリックします。ここでデータベース名とタイプを入力します。
データベースのタイプは以下の3種類です。試しに使用してみる程度であれば、Deviceを選ぶのをおすすめします。

- **Device**: アプリケーションを動かす端末にデータベースを保持します。データベースが大きくなると、アプリケーションの容量も大きくなります。
- **Cloud**:  Developer Portalのクラウド上にデータベースを保持します。アプリケーションの容量は軽くなりますが、**2つ以上のARマーカーを同時に追従することができません。**
- **Vumark**: 新しいARトラッキングの手法のようです。[こちら](https://library.vuforia.com/articles/Training/VuMark)を参照してください。

データベースを作成したら、次にそのデータベースにARマーカーとして読み込みたいターゲットを準備します。
今回は適当な画像データをターゲットとして読み込みましょう。Single Imageを選択し、ターゲットとする画像ファイルをアップロードします。
Widthは現実世界でのターゲットの大きさを指定するようです。経験上は適当に入れてもなんとかなります。
![スクリーンショット 2016-09-30 18.14.44.png](https://qiita-image-store.s3.amazonaws.com/0/83524/2d01377a-da0f-24f8-45b8-aec9fa6f1b4b.png)

ターゲットの情報を入力したら、画面右上のDownload Databaseをクリックしてターゲットの情報をダウンロードします。ターゲットはunitypackageとしてダウンロードされます。

### 4. vuforia SDKと手順3で作成したデータベースのパッケージをダウンロードし、Unityプロジェクトにインポートする
**(2018/06/17追記)Unity 2017.2 から、vuforia SDK はUnityに統合されました。
Unityのインストーラーにて、 Vuforia ArgumentedReality Support にチェックを入れてからUnityをインストールしましょう。**
![vuforia1.PNG](https://qiita-image-store.s3.amazonaws.com/0/83524/bc4582b2-2857-df7c-b5d9-82e3159b3aeb.png)
**Unityをインストールして新しいUnityプロジェクトを作成したら、まずメニューバーの Edit → Project Settings → Player を選択し、下図のように XR Settings セクションにある Vuforia ArgumentedReality Supported にチェックを入れます。
これにより Vuforia SDK がUnityで使用できるようになります。**
![vuforia2.PNG](https://qiita-image-store.s3.amazonaws.com/0/83524/2cb3df0f-d53b-5213-de5b-f3dab0949afe.png)

**以下、古い情報です。この方法でもUnity用のSDKは使用できますが、Legacyとなっており2017年以降に登場した新しい機能は実装されていません。**

vuforia SDK は、Developer Portalの[Downloads](https://developer.vuforia.com/downloads/sdk)からダウンロードできます。Unity用のものを選択しましょう。
アプリケーションを作成するためのUnityプロジェクトに、ダウンロードしたSDKとデータベースをインポートします。

長くなりましたが、これでUnityでvuforiaを使用する準備が整いました。

# ARマーカーから3Dオブジェクトを表示させる
ここでは、データベースに登録したARマーカーに3Dオブジェクトを紐付けて表示させるという、簡単なARアプリケーションを作成してみましょう。
以下の手順で実施します。

1. ARカメラのオブジェクトを配置する
2. ImageTargetのオブジェクトを配置する
3. ImageTargetのオブジェクトと、表示させたい3Dオブジェクトを紐付ける
4. アプリケーションを実行する

### 1. ARカメラのオブジェクトを配置する
Unityプロジェクトを新規作成するとMainCameraのオブジェクトがすでに存在していますが、それを削除します。
インポートしたUnityパッケージから、「vuforia」→「Prefabs」のフォルダにある「ARCamera」というオブジェクトをシーン中の適当な場所に配置します。

---
**(2018/06/17追記)Unity 2017.2以降で、Unityに統合されたVuforia SDKを使用している場合、下図のように GameObject → Vuforia と選択することで、ARCameraなどVuforiaに関連するGameObjectを配置することができます。
(Hierarchyビューで右クリックしてVuforiaを選択することでもGameObjectの配置ができます)**
![vuforia3.png](https://qiita-image-store.s3.amazonaws.com/0/83524/d61c1b06-a498-ec20-e9af-33d940b54f3d.png)

---

続いて、ARCameraのオブジェクトのInspectorをいじります。
いじる箇所は下図の赤枠で囲んだところです。
![スクリーンショット 2016-09-30 18.54.34.png](https://qiita-image-store.s3.amazonaws.com/0/83524/d36f9187-d886-4073-768d-e9f5c5d38673.png)

上の赤枠「App License Key」のところには、先ほど登録したライセンスキーをコピー&ペーストしましょう。
したの赤枠「Load データベース名」と、その下の「Activate」のチェックボックスにはチェックを入れましょう。これによりデータベースを有効化できます。
画像のように、複数のデータベースを読み込むこともできます。

### 2. ImageTargetのオブジェクトを配置する
ARCameraと同様に「vuforia」→「Prefabs」のフォルダにあるImageTargetのオブジェクトを、シーン中の適当な場所に配置します。
ImageTargetのInspectorのうち、下図の赤枠で囲まれた箇所をいじります。
![スクリーンショット 2016-09-30 18.58.15.png](https://qiita-image-store.s3.amazonaws.com/0/83524/4310f088-aa78-bf15-2fae-acbad5189b73.png)
Databaseにはインポートしたデータベース名を、Image Targetにはデータベースの中で作成したターゲット名を選択して入れましょう。

### 3. ImageTargetのオブジェクトと、表示させたい3Dオブジェクトを紐付ける
表示させたいGameObjectを用意し、ImageTargetの子オブジェクトとします。
これにより、親であるImageTargetと紐付けることができます。
![スクリーンショット 2016-09-30 19.01.12.png](https://qiita-image-store.s3.amazonaws.com/0/83524/7f880f51-9dd6-1b76-c671-76069248f772.png)

シーン上のGameObjectとImageTargetの位置関係は、ARカメラ上で実際にターゲットを捉えた際にそのまま反映されます。
つまり、シーン上でImageTargetの真上にGameObjectを配置すると、ARカメラ上でもターゲットの真上にGameObjectが表示されます。
![スクリーンショット 2016-09-30 19.02.58.png](https://qiita-image-store.s3.amazonaws.com/0/83524/29e8551d-27de-8b67-f034-f549568b74a6.png)

図は、将棋の駒である王将の画像の上にUnityちゃんを表示させようとしています。


### 4. アプリケーションを実行する
ここまで出来たら、アプリケーションを実行してみましょう。
PC内蔵のカメラの映像が映っているはずです。
(お使いのPCにカメラが内蔵されていない場合は、別途Webカメラを用意する必要があります)
![スクリーン.png](https://qiita-image-store.s3.amazonaws.com/0/83524/211b39c9-e338-1b4a-4374-93a4c30030c0.png)


このように、ARマーカーに紐付いた3Dオブジェクトが表示されました。

# おわりに
以上で、プログラミングなしでも簡単にUnityでAR開発ができることが分かると思います。
もちろん、プログラミングにより開発の幅を広げることもできます。
公式のリファレンスを覗いてみると良いでしょう。
https://library.vuforia.com/api-list

また、Developers Portalには多くのサンプルがあります。
これらを試してみるのも良いでしょう。
https://developer.vuforia.com/downloads/samples
日本語での紹介記事もあります。
http://anchan828.tumblr.com/post/38984394106/vuforia%E3%81%A7%E5%87%BA%E6%9D%A5%E3%82%8B%E3%81%93%E3%81%A8