じゅころぐAR

ARのブログ

AR FoundationでARアプリの開発をはじめる

UnityでARKitを使って開発を行う際、Unity ARKit Pluginを使っていたのですが、いつの間にかタイトルに"[Now deprecated as of June 3, 2019]"(2019/6/3現在 非推奨)の文言が…

今後はUnityでARKitを使うならAR Foundationを使ってくださいということのようです。

blogs.unity3d.com

ARCoreとARKit両対応だと機能アップデートに追従してくれるか不安なのと、Unity独自のクラス設計が苦手なので敬遠していたのですが、ARKit3も触りたいし、こうなってしまっては仕方ない。
AR Foundationの使い方も覚えることにします!

AR Foundationのインストール

こちらのマニュアルには、"Window" > "Package Manager"からAR Foundationをインストールと書かれています。

早速Package Managerを開いてPackagesの一覧を見ると・・・、

f:id:jyuko49:20190610132756p:plain

AR Foundationが無いですね!!

色々探ってみたところ、"Advanced" > "Shaw preview packages"をチェックする必要があるようです。

Unityのドキュメントってそういうとこあるよね。

メニューからチェックすると、AR系のパッケージも出てきます。

f:id:jyuko49:20190610134412p:plain

f:id:jyuko49:20190610135335p:plain

AR Foundationは当然インストールする("Install"ボタンわかりにくい)として、ARKitを使う場合はARKit XR Plugin、ARCoreを使う場合はARCore XR Pluginもインストールします。

  • ARKit XR Plugin
  • ARCore XR Plugin

ARKit Face Trackingはマニュアルで言及がないですが、Face Trackingを使う場合には必要なのかと思います。

Preview packagesの扱い

ちなみに、Previewのパッケージって使って大丈夫なの?って話ですが、こちらのページの説明によると、

NOTE: Preview packages are not verified to work with Unity and might be unstable. They are not supported in production environments.

PreviewパッケージはUnityでの確認をしていないので、動作が不安定になるかもしれません。製品環境ではサポートされていません。

・・・あまり大丈夫ではなさそう。

まあ、公式がこれ使えって言ってるんだからOKでしょう。

ARシーンの設定

引き続き、マニュアルを読みながら進めていきます。

Hierarchyで右クリックすると、Createのメニューに"XR"が追加されています。

f:id:jyuko49:20190610143226p:plain

ARシーンを構成するには、最初にAR SessionAR Session Originを追加するようです。
AR Session Originは子コンポーネントにAR Cameraを持っているので、デフォルトで配置されていたCameraは削除します。

とりあえず、この2つのみを配置した状態で、さらにAR表示とトラッキング確認用のCubeを追加してビルドしてみます。

f:id:jyuko49:20190610145636p:plain

iOSでのビルド

(ARKit Pluginからの移行が目的なので)まずはプラットフォームをiOSにしたのですが、デフォルト設定でビルドしようとするとエラーが2件出ます。

1件はカメラ使用に対するメッセージの不足です(割とよくある)
それっぽい文言を仮で入れます。

f:id:jyuko49:20190610152222p:plain

2件目はArchitectureの設定でARKit XP PluginはARM64でないと動かないようです。

f:id:jyuko49:20190610152445p:plain

2件とも設定を直せ的なエラーが出るので、エラーメッセージをちゃんと読めばすぐ解決します。

f:id:jyuko49:20190610152834p:plain

上記を直せばビルドは通るはずなので、XCode経由で実機にインストールします。

ARにはなってますね。

Androidでのビルド

プラットフォームをAndroidに変えてビルドしてみます。
こちらもデフォルト設定では、2件エラーになりました。

1件はAndroidのAPIバージョンです(割とよくある)
ARCoreの要件がAndroid 7.0以上なので、Minimum API Levelを24(Android 7.0)以上に設定します。

f:id:jyuko49:20190610162313p:plain

Android SDKがない場合はAndroid StudioのSDK Managerでインストールしてください。

2件目はあまり見慣れないエラーですが、Vulkan APIはARCoreでは使えないよ的なメッセージが出ています。

f:id:jyuko49:20190610162951p:plain

そんな設定あったっけ?と"Player Settings" > "Other Settings"を見てみると・・・いますね。Unity 2019.1でデフォルトが変わったのかな?

f:id:jyuko49:20190610163502p:plain

Vulkanをリストから削除ではなく、Auto Graphics APIにチェックで回避しました。

これでビルドが通るので実機で確認します。

f:id:jyuko49:20190610164103p:plain

ちゃんとCubeがARで表示されてますね。明るさが違うのは、Directional Lightを追加したからなので環境の差異ではないです。

サンプルの実行

さて、ここまではマニュアルに書かれているのですが、ここから先の各APIの使い方はAPIリファレンスくらいしか見当たりません。

そのため、GithubのAR Foundation Samplesを参考にして実装するしかなさそうです。
なお、README.mdは簡素な説明しか書かれておらず、リンクは先程のマニュアルにループします。

ダウンロード

CLI使っているのでgit cloneで一発です。

git clone https://github.com/Unity-Technologies/arfoundation-samples.git

git使ってない方はDownload ZIPでも問題ないです。

Unityプロジェクトに追加

Unity Hubの"リストに追加"を行います。
クリックするとエクスプローラーが開くので、ダウンロードしたarfoundation-samplesのフォルダを選択して"開く"で追加されます。

f:id:jyuko49:20190610170938p:plain

サンプルの構成

Scenesの中身を見ると、ARKitの主要な機能はサンプルがありそうです。

  • Plane Detection(平面検知)
  • ImageTracking(画像トラッキング)
  • Object Tracking(物体トラッキング)
  • FaceTracking(顔認識)
  • HumanSegmentation(モーションキャプチャ、オクルージョン)

機能の追加

サンプルが用意されている機能のうち、Plane Detectionによる平面検知を実装してみます。

サンプルを眺める

FeatheredPlanesというサンプルを眺めていると、AR Session OriginにAR Plane Managerがアタッチされていることがわかります。

f:id:jyuko49:20190610174625p:plain

また、Plane PrefabとしてセットされているAR Feathered Planeにもなんか色々付いています。

f:id:jyuko49:20190610174658p:plain

平面検知に関しては、スクリプトなしで実装できそうです。

実装してみる

まず先にPlane Prefabを作ります。
一から作成してもいいのですが、右クリックから作成できるXRのメニューにAR Defalut Planeがあるということに気付いていたので、こちらから作ってみます。

f:id:jyuko49:20190610180126p:plain

作成されるGameObjectには、サンプルのPlane Prefabと同様にAR PlaneAR Plane Mesh Visualizerがアタッチされています。
このままPrefab化すれば使えますが、Prefab化の際にMesh RendererのMaterialが消えてしまうので、確認してMaterialを設定してください。なお、そのままでもピンクにはなります。

f:id:jyuko49:20190610180631p:plain

次に、AR Session OriginにAR Plane Managerをアタッチして、Plane Prefabに今作成したAR Default Planeをセットします。

f:id:jyuko49:20190610181836p:plain

ビルドして実機で動かしてみると、平面検知できてます。

f:id:jyuko49:20190610193451p:plain

まとめ

AR Foundationはスクリプトを書かなくてもある程度動くので、ARの機能をライトに使いたい場合には割と簡単かもしれません。ただ、ドキュメントがあまり整備されていないのでサンプルを触りながら構成や動作を理解していく必要がありそうです。

また、個人的にはスクリプトを書いていくスタイルなので、サンプルのソースコードAPIリファレンスといずれは向き合わなければいけないですね。