Azure Spatial Anchors v1.1.0 Unity Android版のデモアプリをビルドしてみる

# はじめに

先日、[Azure Spatial Anchors v1.1.0](https://github.com/Azure/azure-spatial-anchors-samples/releases/tag/v1.1.0)がリリースされた。[ARCore 1.7](https://github.com/google-ar/arcore-unity-sdk/releases/tag/v1.7.0)に対応した他、HoloLens 2に正式対応したらしい。ぱっと見Unity版のサンプルの構成が微妙に変わっていて[英語版のドキュメント](https://docs.microsoft.com/en-us/azure/spatial-anchors/quickstarts/get-started-unity-android)も微妙に更新されているが、[日本語版](https://docs.microsoft.com/ja-jp/azure/spatial-anchors/quickstarts/get-started-unity-android)はまだ追従していない感じ。まあどっちにしろMSの公式ドキュメントはそのままやっても完了しない場合があるので適当にみながらやってみようと思う

今回は公式の英語版をもとにUnity版 Androidのサンプルアプリのビルドまでをやってみる。環境は以下のような構成でやった

* Unity 2018.3.12f1 for Mac
* Android SDK API Level 28 (Android 9.0)
* Android Studio 3.4
* Google Pixel 3 (Android 9)

UnityのAndorid SDK設定など、開発に必要なセットアップは終えているものとする

# Spatial Anchorsのリソースを作成する

Azure Portalの上部検索フォームに`Spatial Anchors`と入力して**Spatial Anchors Accounts (プレビュー)**を選択する

![s1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/6de92fd2-8540-db07-3f28-ff2844702154.png)

**追加**ボタンをクリックしてSpatial Anchors Accountブレードの**Resource Name**、 **サブスクリプション**、 **リソースグループ** 、**場所** を入力し、**New** ボタンをクリックする

デプロイが完了したらリソースに移動し、**アカウントID**をコピーして控えておく

![スクリーンショット 2019-04-23 21.25.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/ecb233b9-b2f3-d71d-ce44-eb53582a6dfe.png)

**Keys** に移動し、**Primary Key**をコピーして控えておく

![スクリーンショット 2019-04-23 21.31.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/d574e23f-a58b-27b1-bcdc-b39e6fab06bc.png)

Portal側はこれで完了

# サンプルプロジェクトをビルドする

[arcore-unity-sdk](https://github.com/google-ar/arcore-unity-sdk/releases/tag/v1.7.0)から`arcore-unity-sdk-1.7.0.unitypackage`をダウンロードする

以下で[azure-spatial-anchors-samples](https://github.com/Azure/azure-spatial-anchors-samples)をクローンする

```
git clone https://github.com/Azure/azure-spatial-anchors-samples.git
```

Unityを起動して、`./azure-spatial-anchors-samples/Unity` ディレクトリを開く

`バージョンの異なるエディタで...`ダイアログが表示された場合、**続行** をクリックする

![スクリーンショット 2019-04-23 21.39.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/8b6533d9-aa1e-f335-c600-fab6e59c324a.png)

**ファイル** -> **ビルド設定** を選択する

![スクリーンショット 2019-04-23 21.41.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/ef17af6b-62ac-eb34-1530-4c9d634edec4.png)

**ビルドに含まれるシーン** はデフォルトのまま全選択。**プラットフォーム** で `Android`を選択し**Switch Platform**ボタンをクリックする

![スクリーンショット 2019-04-23 21.44.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/fcc0d30d-7553-2ff7-0cab-1fae5cfb9653.png)

設定が完了したら**ビルド設定** を閉じる

**アセット** -> **パッケージをインポート** -> **カスタムパッケージ** を選択する

![スクリーンショット 2019-04-23 21.45.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/7c8ff393-7b4d-347f-14df-ac90e7f368fc.png)

先ほどダウンロードしておいた`arcore-unity-sdk-1.7.0.unitypackage`を選択して**Open**ボタンをクリックする

パッケージの内容がすべて選択されているのを確認して**インポート** ボタンをクリックする

![スクリーンショット 2019-04-23 21.47.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/446ba611-810d-3aed-b20b-f537fa324e29.png)

プロジェクトから**Assets** -> **AzureSpatialAnchorsPlugin** -> **Examples** -> **Resources** とフォルダを選択して、`AzureSpatialAnchorsDemoConfig` アセットを選択する

![スクリーンショット 2019-04-23 21.52.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/23f9bc93-d0bd-50f4-1ef2-7ff79a3651f7.png)

インスペクターで控えておいたSpatial Anchor Accountの**Account ID**と**Primary Key**を入力してプロジェクトを保存する

![スクリーンショット 2019-04-23 21.54.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/14a5106d-0483-9274-4971-acc7937db265.png)

以下は任意だが、ビルド前にやっておいたほうがいいかもしれない。**アセット** -> **すべてを再インポート**を選択してアセットを再構成する

公式のNoteに記載があるが、ビルド後apkを端末で起動するとカメラが正常に起動しない場合がある。そうなったときにアセットを再インポートして再ビルドするとカメラが正常に起動するようになる。ちなみにぼくは再インポートしない場合はすべてカメラが起動しなかった。なので事前にやっといたほうが無難かも

再インポートするとUnityが再起動してアセットが再構成される

![スクリーンショット 2019-04-23 21.56.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/4ee3463f-8eed-98ba-49ad-1276a56053a8.png)

![スクリーンショット 2019-04-23 21.57.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/3144a904-2e21-80cc-01e0-b8af2bc8314f.png)

端末(Pixel3)をPCにUSBで接続し、デバッグモードにしておく

**ファイル** -> **ビルド設定** を選択する

![スクリーンショット 2019-04-23 22.06.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/d7b65b9c-a7a7-0203-0367-de38bfed79a9.png)

**デバイスを実行します**でPixel3を選択し**Refresh**ボタンをクリックする

**ビルドして実行** ボタンをクリックする

![スクリーンショット 2019-04-23 22.07.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/f50ff3db-b060-472c-787b-2b0198290a13.png)

適当な名前を入力して**Save**をクリックする

![スクリーンショット 2019-04-23 22.09.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/b15db262-af3a-22fc-93e5-685e8a8d1846.png)

ビルドが完了すると端末にデモアプリが表示される。**Go!** ボタンをタップする

![Screenshot_20190423-221246.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/61271f1d-60f2-d365-8d35-ff89b051db67.png)

BasicDemoは基本的に画面中の説明にしたがって**Next Step**ボタンをタップしていくことで進んでいく。途中で画面をタップしてオブジェクトを配置し、オブジェクトの周囲をまわってスキャンしてAnchorをセーブしてからオブジェクトを一旦削除、その後Anchorをクエリしてオブジェクトを同一の場所に再配置する。というプロセスでAzure Spatial Anchorsの機能を説明している

途中で動きがおかしくなった場合はUnityで再ビルド&インストールするとうまくいく

![Screenshot_20190423-221852.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/7a960404-4693-8046-e756-306cf8dba503.png)

![Screenshot_20190423-221940.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/791280a8-72bb-59dc-d87b-d9c1eaf74234.png)

Spatial Anchor Accountの概要を更新してみると、該当するアカウントにアクセスした記録が確認できる

![スクリーンショット 2019-04-23 22.45.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/f12305d5-68bd-9a39-3654-acbe42d78f26.png)

# まとめ

デモアプリのランチャーには`BasicDemo`の他に`NearbyDemo`、`LocalShare`が収録されている。複数端末間の[シェアリング](https://docs.microsoft.com/en-us/azure/spatial-anchors/tutorials/tutorial-share-anchors-across-devices)がキモなので次はこれを試してみたい。

そのうちiOS版も試そうと思う。HoloLens 2ではいつになったら試せるのやら。