UnityでARKitを使って開発を行う際、Unity ARKit Pluginを使っていたのですが、いつの間にかタイトルに"[Now deprecated as of June 3, 2019]"(2019/6/3現在 非推奨)の文言が…
今後はUnityでARKitを使うならAR Foundationを使ってくださいということのようです。
ARCoreとARKit両対応だと機能アップデートに追従してくれるか不安なのと、Unity独自のクラス設計が苦手なので敬遠していたのですが、ARKit3も触りたいし、こうなってしまっては仕方ない。
AR Foundationの使い方も覚えることにします!
AR Foundationのインストール
こちらのマニュアルには、"Window" > "Package Manager"からAR Foundationをインストールと書かれています。
早速Package Managerを開いてPackagesの一覧を見ると・・・、
AR Foundationが無いですね!!
色々探ってみたところ、"Advanced" > "Shaw preview packages"をチェックする必要があるようです。
Advancedってとこの"Shaw preview packages"にしたら出た。
— jyuko (@jyuko49) 2019年6月10日
これはわかんないでしょ。てか、チュートリアルに書いといてくれ。
Unityのドキュメントってそういうとこあるよね。
メニューからチェックすると、AR系のパッケージも出てきます。
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"が追加されています。
ARシーンを構成するには、最初にAR SessionとAR Session Originを追加するようです。
AR Session Originは子コンポーネントにAR Cameraを持っているので、デフォルトで配置されていたCameraは削除します。
とりあえず、この2つのみを配置した状態で、さらにAR表示とトラッキング確認用のCubeを追加してビルドしてみます。
iOSでのビルド
(ARKit Pluginからの移行が目的なので)まずはプラットフォームをiOSにしたのですが、デフォルト設定でビルドしようとするとエラーが2件出ます。
1件はカメラ使用に対するメッセージの不足です(割とよくある)
それっぽい文言を仮で入れます。
2件目はArchitectureの設定でARKit XP PluginはARM64でないと動かないようです。
2件とも設定を直せ的なエラーが出るので、エラーメッセージをちゃんと読めばすぐ解決します。
上記を直せばビルドは通るはずなので、XCode経由で実機にインストールします。
ARにはなってますね。
Androidでのビルド
プラットフォームをAndroidに変えてビルドしてみます。
こちらもデフォルト設定では、2件エラーになりました。
1件はAndroidのAPIバージョンです(割とよくある)
ARCoreの要件がAndroid 7.0以上なので、Minimum API Levelを24(Android 7.0)以上に設定します。
Android SDKがない場合はAndroid StudioのSDK Managerでインストールしてください。
2件目はあまり見慣れないエラーですが、Vulkan APIはARCoreでは使えないよ的なメッセージが出ています。
そんな設定あったっけ?と"Player Settings" > "Other Settings"を見てみると・・・いますね。Unity 2019.1でデフォルトが変わったのかな?
Vulkanをリストから削除ではなく、Auto Graphics APIにチェックで回避しました。
これでビルドが通るので実機で確認します。
ちゃんと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のフォルダを選択して"開く"で追加されます。
サンプルの構成
Scenesの中身を見ると、ARKitの主要な機能はサンプルがありそうです。
- Plane Detection(平面検知)
- ImageTracking(画像トラッキング)
- Object Tracking(物体トラッキング)
- FaceTracking(顔認識)
- HumanSegmentation(モーションキャプチャ、オクルージョン)
機能の追加
サンプルが用意されている機能のうち、Plane Detectionによる平面検知を実装してみます。
サンプルを眺める
FeatheredPlanesというサンプルを眺めていると、AR Session OriginにAR Plane Managerがアタッチされていることがわかります。
また、Plane PrefabとしてセットされているAR Feathered Planeにもなんか色々付いています。
平面検知に関しては、スクリプトなしで実装できそうです。
実装してみる
まず先にPlane Prefabを作ります。
一から作成してもいいのですが、右クリックから作成できるXRのメニューにAR Defalut Planeがあるということに気付いていたので、こちらから作ってみます。
作成されるGameObjectには、サンプルのPlane Prefabと同様にAR PlaneとAR Plane Mesh Visualizerがアタッチされています。
このままPrefab化すれば使えますが、Prefab化の際にMesh RendererのMaterialが消えてしまうので、確認してMaterialを設定してください。なお、そのままでもピンクにはなります。
次に、AR Session OriginにAR Plane Managerをアタッチして、Plane Prefabに今作成したAR Default Planeをセットします。
ビルドして実機で動かしてみると、平面検知できてます。
まとめ
AR Foundationはスクリプトを書かなくてもある程度動くので、ARの機能をライトに使いたい場合には割と簡単かもしれません。ただ、ドキュメントがあまり整備されていないのでサンプルを触りながら構成や動作を理解していく必要がありそうです。
また、個人的にはスクリプトを書いていくスタイルなので、サンプルのソースコード&APIリファレンスといずれは向き合わなければいけないですね。