【Unity】metaioとUnityでロケーションベースARアプリケーションを作る

Unityを用いたARアプリは何度かVuforiaで作っていたので、どちらかというとVuforiaが好きなのですが、残念ながら現状のVuforiaではロケーションベースのARアプリが作成出来ないため、metaioというARライブラリを使用して、簡単なロケーションベースARアプリケーションを作成してみたいと思います。
ちなみに、実機デバッグAndroidの筐体で行います。

環境

Mac OSX Mavericks
Unity v5.0.1
metaio v6.0.2
Android v4.4.2

metaioSDKの準備

まずはmetaioSDKの導入を行います。

Download the Metaio SDK

上記URLにアクセスし、必要情報を入力後Submitを押すとダウンロードページに移動します。

Macユーザーの場合、ダウンロードしたdmgファイルを開き、ライセンスに同意します。

f:id:taka_say:20150514101822p:plain

その後出現する上記ウィンドウ上のフォルダを自分のPC上のどこかにドラッグアンドドロップすればOKです。

Windowsユーザーの場合、インストーラーに従ってインストールを行えば、スタートメニューのプログラムリストに登録されるようです。
WindowsでのUnityの場合、修正しなければならない箇所が他にもあるようなので、詳しくは下記を参照してください。

Setting up the Development Environment | metaio Developer Portal

ARアプリケーション作成

新規プロジェクト作成

まずはUnityを開き、 【File -> New Project】 で適当な新規プロジェクトを作成します。

metaioSDKインポート

次に【Assets -> Import Package -> Custom Package】をクリックし、先ほど準備したmetaioSDKから、metaioSDK.unitypackageを選択します(Macの場合_Unityフォルダ下にあります)。

レイヤーの設定

metaioを正常に動作させるためには、パッケージのインポート後いくつかの設定が必要になります。

まずはレイヤーの設定を行います。

f:id:taka_say:20150514104653p:plain

Unityのエディタ右上にあるLayersからEdit Layersを選択します。

f:id:taka_say:20150514104702p:plain

User Layerの空いている一番若いLayerにmetaioLayerを新規で追加します。

署名の作成と設定

次にアプリケーションに署名を設定します。

Welcome to the metaio Developer Portal

新しく自分のアプリケーション用の署名を作る必要があるので、上記Developerサイトにアクセスし、ログインします。
アカウントがまだない場合は、サイト右上のSign upから新規アカウント作成後、ログインしてください。

f:id:taka_say:20150514105728p:plain ログイン後ページ上部のメニューからMy Appsに移動します。

f:id:taka_say:20150514110219p:plain

My Appsページ下部のApp registrationで新規にアプリケーションの登録を行います。
App NameとApp Identifierに適当な名前を入れ、Register your Appを押し新規に登録します。 f:id:taka_say:20150514110229p:plain

新しくアプリケーションが追加されました。

また、追加されたアプリケーション名を選択すると、
f:id:taka_say:20150514110521p:plain
上記画像のように署名データが表示されます。
自分の使用するSDKのバージョンに対応したSignatureの値をコピーしておきます。

Unityエディタに戻り、デフォルトで設置されているMain Cameraを削除します。
その後プロジェクトビューから【Assets -> metaio -> Prefabs】内にあるmetaioSDKをHierarchyビューにドラッグアンドドロップします。

f:id:taka_say:20150519094026p:plain

HierarchyビューのmetaioSDKを選択し、Inspectorビュー内SDK Signatureの欄に先ほどコピーした値をペーストします。

これで署名の設定は完了です。

ラッキング設定

f:id:taka_say:20150514135123p:plain

また先程の署名設定と同様に、HierarchyビューのmetaioSDKを選択し、Tracking configurationのドロップダウンメニューからGPSを選択します。

トラッカー設置

f:id:taka_say:20150514135334p:plain

【Assets -> metaio -> Prefabs】からmetaioTrackerをHierarchyビューにドラッグアンドドロップし、metaioSDKの子要素にします。

f:id:taka_say:20150519102840p:plain

また、HierarchyビューのmetaioTrackerを選択してInspectorビューを表示し、Geo Locationの値の設定と、Transform cameraのチェックをオフおよびEnable LLA Limitsのチェックをオンにします。
metaio社がミュンヘンにあるということで、Geo Locationの値はミュンヘンの座標にしてみました。

このGeo Locationの値なのですが、それぞれX, Yという変数名がつけられていたため、X=経度でY=緯度だと勝手に勘違いしていました。正しくは、XY=緯度経度で問題ないようです。気付かず試行していたため、正しい位置で表示してくれなくて焦りました。

3Dモデル設置

最後に、3DモデルをmetaioTrackerの子要素として設定すれば完了です。
モデルは何でも構わないのですが、こういう時には定番ということでunity-chanにご登場願いました。面倒な方はCubeやSphere等で全く問題ありません。

ダウンロード - UNITY-CHAN!

上記から、いつも通りUnity-chan公式からモデルを含む.unitypackageをダウンロードします。
f:id:taka_say:20150519102723p:plain 規約同意後、3Dモデルデータをダウンロード。

f:id:taka_say:20150519103035p:plain 【Assets -> Import Package -> Custom Package】から、先ほど入手したunity-chanのパッケージをインポートします。

f:id:taka_say:20150519103810p:plain

とりあえずモデルだけ使用できれば良いので、他のチェックは消してインポート(Voiceファイルとか多すぎて容量大きい……)。

f:id:taka_say:20150519104241p:plain インポート後【UnityChan -> Models -> unitychan】をHierarchyビューにドラッグアンドドロップし、metaioTrackerの子要素にします。
また、恐らくですが、デフォルトのサイズでは小さすぎてモデルが見えないので、unitychanのScaleをXYZそれぞれ100に設定します。

ビルド! そして ラン!

ここまで来たらあとは実行するのみです。

まず現在のシーンを適当な名前で保存します。

次に【File -> Build Settings】を選択し、Add Currentで保存したシーンを追加します。

f:id:taka_say:20150519162446p:plain

また、PlatformはAndroidを選択します(UnityでのAndroidのビルドに関しては適宜検索してください)。

その後Build And Runを選択します。
Buildが完了し次第、実機のAndroidでアプリの実行が開始されます。

起動後、実機を手にミュンヘンの方向を向いてみると……

f:id:taka_say:20150519164820p:plain

無事unity-chanが表示されました!

総括

ロケーションベースのARは難しい印象があったのですが、metaioならとても簡単に実装することが出来ました。 Vuforiaと同じく、iOSAndroidそしてUnityといった各種プラットフォームがサポートされている点も魅力的かと思います。

屋内の開けた場所であれば、精度もそこまで悪くないようですので、色々と遊んでみると楽しいかもしれません。