読者です 読者をやめる 読者になる 読者になる

【Unity】Vuforiaとユニティちゃんを使ってARアプリケーションを作る

2015年2月28日追記
Vuforiaのバージョンが変更されたため、Vuforia4.0に対応した記事を用意しました。
【Unity】Vuforia4.0とユニティちゃんを使ってARアプリケーションを作る - プログラムは、用いる言葉の選択で決まる

以前試験的に簡単なARアプリをUnity+Vuforiaで作ってみたのですが、だいぶ前のことなのでやり方を忘れてしまいました。
というわけで今後の復習用にも作成手順をメモっておきます。

環境

Windows7 64bit
Unity v4.3.4
Vuforia v2.8.9
Unity-chan v1.1.1

Vuforiaの入手

UnityでVuforiaを使うためには、VuforiaのDeveloperサイトに登録する必要があります。
Vuforia Developer Portal
f:id:taka_say:20140521163938j:plain
サイト右上のRegisterから指示された順に従ってアカウントを作成します。

無事アカウントができたら以下のページからUnity用のVuforiaパッケージをダウンロードしましょう。
https://developer.vuforia.com/resources/sdk/unity

Asset Storeからもダウンロード出来るよ!と書いてあったのですが、検索しても出てこなかったので多分無いのでしょう。

Vuforiaの導入

公式ドキュメント通りに、ターゲットマーカーがカメラに写ったら3Dモデルを表示するという、基本的なARアプリケーションを作っていこうと思います。

初めに、ダウンロードしたVuforiaのパッケージをUnityへインポートします。
f:id:taka_say:20140521170751j:plain
メニューから【Assets->Import Package->Custom Package】を選択します。

f:id:taka_say:20140521170852j:plain
ダウンロードしたVuforiaのUnity用パッケージを選択しましょう。

f:id:taka_say:20140521170936j:plain
出てきたウィンドウのImportをクリックします。

f:id:taka_say:20140521171012j:plain
無事インポートされました。


次に任意のターゲットマーカーを利用するためのTargetManagerを作成します。
f:id:taka_say:20140521171518j:plain
ログインした状態でヘッダーメニューからTargetManagerを選択すると、TargetManagerの管理画面に移動出来ます。
TargerManagerの管理画面にあるCreate Databaseボタンをクリック。
f:id:taka_say:20140521171851j:plain
出現したモーダルダイアログにTarget Managerのデータベース名を入力、Createボタンを押して新規作成します。
f:id:taka_say:20140521172017j:plain
無事新規Target Managerデータベースが作成されたので、作成したデータベースをクリックしてターゲット設定ページに移動します。
f:id:taka_say:20140521172227j:plain
新規ターゲットを追加するため、Add Targetボタンをクリックします。
f:id:taka_say:20140521172235j:plain
出現したモーダルダイアログで各項目を設定します。
Target Nameにはターゲット画像が分かるような名前を付けましょう。
Target Typeはターゲットの形状を指定します。ここではシンプルな平面画像を利用します。
Target DimensionのWidthは何か重要らしいのですが、よく分からないのでとりあえず100にしておきます。

NOTE: The width parameter is very important, as the pose information returned during tracking will be in the same scale. For example, if your image target is 16 units wide, moving the camera from the left border of the target to the right border of the target will change the returned position by 16 units along the x-axis. Enter the dimension of your target in the same scene unit as your augmentation. The size of the target shall be relative to the size of the augmented virtual content.

一応公式のTarget Dimensionに関する記述を引用しておくので、気になる方は読み解いてみてください。
最後にTaget Image Fileでターゲットにする画像を指定してからAddをクリックし、新規ターゲットを追加します。
ここではユニティちゃんのロゴイメージを用いました。

f:id:taka_say:20140521172949j:plain
無事新規ターゲットが追加されています。
次に、今作成したターゲットデータをUnityで利用するためのパッケージをダウンロードします。
Target Nameの横にあるチェックボックスにチェックを入れ、Donwload Selected Targetsをクリックします。
f:id:taka_say:20140521173312j:plain
出現したモーダルダイアログのラジオボタンでUnity Editorを選び、Database Nameを入力後Createを押すとターゲットデータパッケージのダウンロードが始まります。

ダウンロードが終了したら、最初にVuforiaパッケージをインポートしたときと同様の方法で、ターゲットデータパッケージのインポートを行います。
f:id:taka_say:20140521174331j:plain
大体こんな感じになっていればOK。

以上でUnityへのVuforia関連ファイルの仕込みは完了です。

UnityでARアプリの作成

ここまでで準備したVuforia関連ファイルを利用して、実際にARアプリを作っていきたいと思います。

恐らく真っさらな新規シーンが開いているとは思いますが、何か別のシーンを開いている場合は【File->New Scene】で新規シーンを作成します。
以降適当なタイミングでシーンの保存を行ってください。
適宜保存していないと、Unityがエラーで終了したとき悲しい気持ちになります(なりました)。

f:id:taka_say:20140521174938j:plain
VuforiaのARアプリでは予めVuforiaパッケージで用意されているカメラを使用するため、HierarchyビューからMain Cameraを削除しましょう。
f:id:taka_say:20140521175101j:plain
Qualcomm Augmented Reality->Prefab】にあるARCameraをHierarcheビューにドラッグアンドドロップし、シーンに追加します。
f:id:taka_say:20140521175538j:plain
同様に【Qualcomm Augmented Reality->Prefab】にあるImageTargetをHierarcheビューにドラッグアンドドロップし、シーンに追加します。これはイメージターゲットオブジェクトの一つのインスタンスとなります。
このImageTargetに作成したターゲットデータを指定して利用していくわけです。

というわけでHierarchyビューでImageTargetを選択し、InspectorビューにImageTargetを表示させましょう。
f:id:taka_say:20140521175936j:plain
適切にVuforiaファイルのインポートが済んでいれば、Image Target BehaviourスクリプトにあるData Setのドロップダウンメニューをクリックした時に、インポートしたターゲットデータの名前があるはずなのでこれを選択します。
f:id:taka_say:20140521180328j:plain
Image Targetも自動で設定されていればOKなはずです。


ターゲットの設定は出来たので、次は出現する3Dモデルを設定しましょう。
公式ではCubeを使っていますが、せっかくなのでここではユニティちゃんを表示してみたいと思います。
もしユニティちゃんを持っていないようであれば、こちらからダウンロードしましょう。
DATA DOWNLOAD-利用規約 | UNITY-CHAN! OFFICIAL WEBSITE


ユニティちゃんの用意ができたら、毎度おなじみのパッケージインポートを行います。
f:id:taka_say:20140521180810j:plain
【UnityChan->Prefabs】からUnityちゃんのPrefabをHierarchyビューのImageTargetオブジェクトの子供になるようにドラッグアンドドロップします。
f:id:taka_say:20140521181302j:plain
位置、向き等は適当に微修正してあげてください。

このままだと真っ暗なので、【UnityChan->Prefabs】からDirectional light for UnityChanをHierarchyビューに追加します。
f:id:taka_say:20140521191730j:plain
明るくなりました!
もし明るくならない場合は、一旦シーンを保存してからシーンの再読み込みをしてみてください。

f:id:taka_say:20140521181820j:plain
最後にARCameraのData Set Load BehaviourのLoad Data Set UnityChanVuforia(作成したターゲットデータの名前)とActivateにチェックを入れます。

以上でUnityでVuforiaを利用したARアプリケーションの作成は終了です。
無事動作するか確認するためにデプロイを行いましょう!

確認はAndroid端末で行います。
Webカメラ等でも動作の確認を行いたかったのですが、不幸にも自宅のWebカメラが壊れていたため確認出来ませんでした。
恐らくは正常に動作するかと思います。

Android端末にデプロイ

※以下UnityでのAndroidアプリBuildが出来る状態になっているものとします。もしAndroidアプリのビルドを行ったことがない場合は、各自ググるなどして予め設定を行ってください。※
メニューから【File->Build Settings】を選択します。
f:id:taka_say:20140521182344j:plain
プラットフォームをAndroidに変えましょう。
Androidでの細かい設定はPlayer Settingsを選択することで指定することが出来ます。
ここではデフォルトのままでいきます。
最後にAdd Currentをクリックし、現在のシーンをScenes in Buildに追加します。
f:id:taka_say:20140521182917j:plain
ここまで設定をしたら、Buildをクリックし保存先とファイル名を指定して.apkファイルを保存します。
f:id:taka_say:20140521183001j:plain
しばらく待つと、.apkが出力されるはずです。
f:id:taka_say:20140521192647j:plain
デプロイ先のAndroidデバイスをPCに接続し、適当なフォルダに先ほど出力した.apkファイルをコピーします。
あとはAndroid端末のファイルビューアプリケーションから作成した.apkファイルを実行し、インストールを行ってあげればOKです。
インストールが完了したらアプリケーションを実行してあげましょう。

実行後ターゲットマーカーを映してあげれば、無事ユニティちゃんが表示されているのを確認することが出来るかと思います。
f:id:taka_say:20140521185556j:plain
思わぬ副産物だったのですが、ユニティちゃんに付属しているARPoseのスクリプトがデフォルトで働いているようなので、GUIのボタンは小さいですが、一応ユニティちゃんのポージングを変えることが出来ます。
f:id:taka_say:20140521185559j:plain
ポーズを変更しながらターゲットマーカーの向きを少しずらしてみたり。
f:id:taka_say:20140521185602j:plain
ポーズを変更しながらターゲットマーカーの向きをだいぶずらしてみたり。

……

とにかく!無事ユニティちゃんの表示が出来ました!!

まとめ

記事を書きながら実際に手を動かしていたので、最終的に上手く表示できなかったらどうしようかとかなり危惧していたのですが、無事に動くものが完成して大変安堵しました。

ネイティブでARアプリケーションを作ろうと思うとかなりの労力が必要とされるように思いますが、Unity+Vuforiaならば1時間程度で簡単にARアプリケーションの実装が出来てしまいます。
正直、実際にやってみて非常に驚きました。
作業工程で難しいことが何一つとしてないわけですから、誰でも簡単にARアプリの作成が可能です。
Unityの謳うゲーム開発の民主化は、ゲームだけに留まらないレベルまで到達しているのかもしれませんね。

今回はUnity+VuforiaでのARアプリの基礎の基礎を試してみただけなので、今後どのようにARアプリとしての体裁を整えていくかは検討の余地があるかと思います。
とりあえず色々やって遊びながら試行錯誤して行きます。Unity楽しい!


参考
All Articles View | Vuforia Library Prod
All Articles View | Vuforia Library Prod