Unity 2020.1.4fで,Androidで,ARCore
今回は,Android上で動作するARのサンプルアプリを,Unityで作ってみたいと思います.
前提条件
Android開発のための環境設定
UnityHubからのAndroidSDK/NDK,JDKのインストール
まずはUnityHubから,UnityにAndroid関連のモジュールを追加します.
数年前まではUnityからAndroidを扱うためには,Android StudioからSDK/NDKをインストールしてパスをUnityに伝えることをしていましたが,今は不要になったようです.便利になりましたね.
下記のチェック欄にチェックをいれたら,「次へ」進み,インストールします.
Unityの新規プロジェクトの作成)
UnityHubの設定が済んだら,新規プロジェクトを作成します.
Unityの設定(File>Build Settings)
まず,Unityのビルド対象をAndroidに切り替えるため,Androidを選択してからSwitch Platformを選択します.プラットフォームの切り替えにはしばらく時間がかかります,気長に待ちましょう.切り替わったら,Player Settingsを開きます.
動作対象とするAndroidの 最低バージョンを指定
Player Settingsを選択すると,Project Settingsが開きます.(これは,誤記なのか意図なのか...?)
そして,下図のように左のタブからPlayerを選択します.そこから,Other Settingsを選び,たくさん続く項目のなかから,Minumum API Levelを見つけて,AndroidのOSバージョンを,Android 8.0に選択します.これはあくまでも動作対象の最低バージョンなので,自身のスマホのバージョンが8以上なら問題ないです.
Vulkanを除去
同様に,Player Settings>Player>Other Settings から,今度は 「Graphics APIs」を見つけ,その一覧から,Vulkanを選択したら,「-」を選択します.これは,Graphics APIとして,Vulkanを除外するために行っています.理由は,Android8以前ではVulkanを扱っていない為です.逆に,最新のAndroid OS 11などではVulkanがサポートされているそうなので,この手順はスキップしてください.ただ,どんなスマホで実行されるか,そんなことまで考えたくないことが多いので,Vulkanは除去しておいた方が無難です.
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を開きます.
左上のPackagesのところをタブを選択し,そこから「Unity Registry」をまずは選択します.すると,下図のようにたくさんの追加候補のパッケージの一覧が表示されます.
このなかから,XR Plugin Managementを見つけます,リストの一番下の方にあります.見つけたら,Importを選択し,パッケージを追加します.
3. Package Managerからの,Multiplayer HLAPIのインポート
続けて,Multiplayer HLAPIをインポートします,が,これは先ほどのようにリスト一覧には表示されていません.なので,別の方法で追加していきます.まず,さきほどと同じようにPackage Managerを開き,左上の「+」を選択したあと,「Add package from git URL...」を選択します.
そして,com.unity.multiplayer-hlapiと入力し,Addを選択することでこのパッケージを追加することができます.ちなみに,このURLは下記のサイトに記載されています.
Multiplayer HLAPI - Unity マニュアル
HelloARシーンの追加
さて,上記で環境設定は完了したので,今度はARのアプリのサンプルシーンを追加していきます.まずはGoogleARCoreの中にサンプルとして含まれているHelloARというシーンを追加するために,下図のようにドラッグ&ドロップします.ついでに,最初から存在しているSample Sceneを除去(Remove)します.
実行してみる
さて,上記でプロジェクトとしては完成しています.とりあえず動作確認してみたいのですが,このWindowsのUnityエディタ上で実行しても,Androidカメラが無い為,ただ真っ黒い画面が表示されるだけです.ただそれでも,予期せぬ設定ミスとかでまともに動作しないことくらいは確認できます.ということで,まずは画面上部の右三角を押して実行し,下図のように真っ黒画面と右上に白の設定ボタンが表示されることを確認してください.
ではここから,Androidスマホで実行するための手順を説明していきます.
まずは自身のスマホで,開発者モードをONにしていきます.スマホによって設定項目の名称が微妙に違ったりしますので,気を付けてください.
次に,スマホをUSBケーブルでPCに接続しておきます.そして,さきほど開いたように,Unityのメイン画面から,File > Build Settingを開きます.
そして最後に,下図のようにHelloARのシーンを,Scenes in Buildに追加したら,Build And Runを実行します.途中何度か「OK」を押すことを求められますが,OKを押して先へ先へと進みます.「Done」と表示された後,スマホを開くとアプリが実行されます.
はい,こんな感じで動作すれば完了です!
マーカーレスARなので,特にマーカーは必要なく,画面内をタップするとそこにARオブジェクトが固定されます.すごいですね~,マーカーレスARがこんなに簡単に,しかも結構ロバストに動作しています.こんな特徴点でなさそうなとこでもヌルヌル動くし.
余談
私がまだ画像処理の研究者を始めたころ,PTAMのデモ動画が発表されて私はとても感動したのを覚えています.こんなワクワクな感動を与える研究を自分もしてみたいと,今でも強く思います.にしもて,PTAMは2007年だったのですね,もう13年も経つのか...
これを見て分かるように,当時でもうすでにマーカーレスARってあったんです.この13年,スマホのスペックはどんどん上がり,さらに,より効率的にStructure from Motionの幾何計算をするアルゴリズムが提案され,VR/ARが許容される社会がやってきて,そしてやっと世の中で技術が使われるようになってきたと感じます.
そして今は,ARCoreというこんな簡単にこんなに楽しい技術を気軽に使える時代です.こういった新しい便利なツールはどんどん活用し,ここからさらに楽しい世界を作っていきたいものですね.