Unity 2020.1.4fで,Androidで,ARCore

今回は,Android上で動作するARのサンプルアプリを,Unityで作ってみたいと思います.

前提条件

  • Unity2020.1.4fとUnityHubがインストールされているWindowsがあること
  • Androidバージョン8以上のスマホを持っていること

Android開発のための環境設定

UnityHubからのAndroidSDK/NDK,JDKのインストール

まずはUnityHubから,UnityにAndroid関連のモジュールを追加します.

数年前まではUnityからAndroidを扱うためには,Android StudioからSDK/NDKをインストールしてパスをUnityに伝えることをしていましたが,今は不要になったようです.便利になりましたね.f:id:cv_lover:20201107224907p:plain

下記のチェック欄にチェックをいれたら,「次へ」進み,インストールします.

f:id:cv_lover:20201107224925p:plain

Unityの新規プロジェクトの作成)

UnityHubの設定が済んだら,新規プロジェクトを作成します.

f:id:cv_lover:20201107233207p:plain

Unityの設定(File>Build Settings)

f:id:cv_lover:20201107233633p:plain

まず,Unityのビルド対象をAndroidに切り替えるため,Androidを選択してからSwitch Platformを選択します.プラットフォームの切り替えにはしばらく時間がかかります,気長に待ちましょう.切り替わったら,Player Settingsを開きます.

f:id:cv_lover:20201107230149p:plain

動作対象とするAndroidの 最低バージョンを指定

Player Settingsを選択すると,Project Settingsが開きます.(これは,誤記なのか意図なのか...?)

そして,下図のように左のタブからPlayerを選択します.そこから,Other Settingsを選び,たくさん続く項目のなかから,Minumum API Levelを見つけて,AndroidのOSバージョンを,Android 8.0に選択します.これはあくまでも動作対象の最低バージョンなので,自身のスマホのバージョンが8以上なら問題ないです.

f:id:cv_lover:20201107231816p:plain

Vulkanを除去

同様に,Player Settings>Player>Other Settings から,今度は 「Graphics APIs」を見つけ,その一覧から,Vulkanを選択したら,「-」を選択します.これは,Graphics APIとして,Vulkanを除外するために行っています.理由は,Android8以前ではVulkanを扱っていない為です.逆に,最新のAndroid OS 11などではVulkanがサポートされているそうなので,この手順はスキップしてください.ただ,どんなスマホで実行されるか,そんなことまで考えたくないことが多いので,Vulkanは除去しておいた方が無難です.

f:id:cv_lover:20201107230445p:plain

ARCoreを利用するためのパッケージの追加

1. ARCore Unity Packageの入手&Import

まずは下記のサイトからarcore-unity-sdk-1.20.0.unitypackageをダウンロードしてきます.ダウンロードしたら,arcore-unity-sdk-1.20.0.unitypackageをダブルクリックで実行すると,自動的にUnityにパッケージを追加しようとするので,Importしてください. 

2. Package Managerからの,XR Plugin ManagementのImport

arcore-unity-sdk-1.20.0.unitypackageは,残念ながら単独ではいろいろ足りないようで,いくつか追加していきます.まずはWindow > Package Managerを開きます.

f:id:cv_lover:20201108001339p:plain

左上のPackagesのところをタブを選択し,そこから「Unity Registry」をまずは選択します.すると,下図のようにたくさんの追加候補のパッケージの一覧が表示されます.

f:id:cv_lover:20201108001616p:plain

このなかから,XR Plugin Managementを見つけます,リストの一番下の方にあります.見つけたら,Importを選択し,パッケージを追加します.

f:id:cv_lover:20201108002036p:plain

3. Package Managerからの,Multiplayer HLAPIのインポート

続けて,Multiplayer HLAPIをインポートします,が,これは先ほどのようにリスト一覧には表示されていません.なので,別の方法で追加していきます.まず,さきほどと同じようにPackage Managerを開き,左上の「+」を選択したあと,「Add package from git URL...」を選択します.

f:id:cv_lover:20201108002528p:plain

そして,com.unity.multiplayer-hlapiと入力し,Addを選択することでこのパッケージを追加することができます.ちなみに,このURLは下記のサイトに記載されています.

Multiplayer HLAPI - Unity マニュアル

f:id:cv_lover:20201108002931p:plain

HelloARシーンの追加

さて,上記で環境設定は完了したので,今度はARのアプリのサンプルシーンを追加していきます.まずはGoogleARCoreの中にサンプルとして含まれているHelloARというシーンを追加するために,下図のようにドラッグ&ドロップします.ついでに,最初から存在しているSample Sceneを除去(Remove)します.

f:id:cv_lover:20201108004123p:plain

実行してみる

さて,上記でプロジェクトとしては完成しています.とりあえず動作確認してみたいのですが,このWindowsのUnityエディタ上で実行しても,Androidカメラが無い為,ただ真っ黒い画面が表示されるだけです.ただそれでも,予期せぬ設定ミスとかでまともに動作しないことくらいは確認できます.ということで,まずは画面上部の右三角を押して実行し,下図のように真っ黒画面と右上に白の設定ボタンが表示されることを確認してください.

f:id:cv_lover:20201108004712p:plain

ではここから,Androidスマホで実行するための手順を説明していきます.

まずは自身のスマホで,開発者モードをONにしていきます.スマホによって設定項目の名称が微妙に違ったりしますので,気を付けてください.

  1. 設定アプリ > デバイス情報 > ビルド番号 を連打 すると,開発者モードがONになります
  2. 設定アプリ > システム > 詳細設定 > 開発者オプション > USBデバッグをON

次に,スマホをUSBケーブルでPCに接続しておきます.そして,さきほど開いたように,Unityのメイン画面から,File > Build Settingを開きます.

そして最後に,下図のようにHelloARのシーンを,Scenes in Buildに追加したら,Build And Runを実行します.途中何度か「OK」を押すことを求められますが,OKを押して先へ先へと進みます.「Done」と表示された後,スマホを開くとアプリが実行されます.

f:id:cv_lover:20201108010214p:plain

はい,こんな感じで動作すれば完了です!

マーカーレスARなので,特にマーカーは必要なく,画面内をタップするとそこにARオブジェクトが固定されます.すごいですね~,マーカーレスARがこんなに簡単に,しかも結構ロバストに動作しています.こんな特徴点でなさそうなとこでもヌルヌル動くし.

f:id:cv_lover:20201108011003p:plain

余談

私がまだ画像処理の研究者を始めたころ,PTAMのデモ動画が発表されて私はとても感動したのを覚えています.こんなワクワクな感動を与える研究を自分もしてみたいと,今でも強く思います.にしもて,PTAMは2007年だったのですね,もう13年も経つのか...

これを見て分かるように,当時でもうすでにマーカーレスARってあったんです.この13年,スマホのスペックはどんどん上がり,さらに,より効率的にStructure from Motionの幾何計算をするアルゴリズムが提案され,VR/ARが許容される社会がやってきて,そしてやっと世の中で技術が使われるようになってきたと感じます.

そして今は,ARCoreというこんな簡単にこんなに楽しい技術を気軽に使える時代です.こういった新しい便利なツールはどんどん活用し,ここからさらに楽しい世界を作っていきたいものですね.

www.youtube.com