はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

Nreal Airを買ったので、まずはARFoudationだけ試してみる

はじめに

3DoFと6DoF

Nreal Airは3DoF(視線方向の回転や傾き検知)ができますが、Nreal Lightの6DoF
nのように「移動」を検知できません。
ですから、360°空間に配置した仮想オブジェクトがそこにあるように魅せることはできますが、そのオブジェクトに近づいたり後ろに回り込んだりのような動きは検知できません。

ARFoundationで不足分を補う

そこで、UnityにあるARFoundationを使ってスマホの位置測定および位置移動を取得してNreal Airに足りない移動検知のための+3DoFを取得して合成することでNreal Airでも6DoF的なアプリがつくれるのではないかと考えました。

まずは、ARFoundationの使い方を覚えよう

そこで、まずはARFoundationだけを使ったAndroidアプリをUnityで作成して、ARFoundationの使い方を調べてみます。

準備

開発環境

  • Unity 2021.3.15f1
  • Visual Studio 2022 (Community 2019なども可)

新規プロジェクト作成

新規作成

Unity Hubを起動して[プロジェクト]→[新規作成]をクリックして、プロジェクトの新規作成を行います。

テンプレートの指定

テンプレートとして[3D]を選択して、プロジェクト名を指定したら[作成]をクリックします。

プラットフォームの変更

Unityを起動してUnityの新規プロジェクトが作成されたら、[File]-[Build Settings]メニューから設定画面を開きます。
プラットフォームを「Android」に変更して[Switch Platform]をクリックします。

はじめてのARFoundationアプリ開発

ARFoundationパッケージの導入

Unityの[Window]-[Pakage Manager]メニューで[パッケージマネージャー]ウィンドウを開きます。

[パッケージマネージャー]ウィンドウで「Packages]の場所を「Unity Registry」に切り替えます。

そして、「AR Foundation」と「ARCore XR Plugin」を指定して、ウィンドウ右下の[Install]ボタンでインストールします。

Main Cameraの削除

「MainCamera」は不要なので「Hierarchy」から削除します。

オブジェクト追加

「Hierarchy」を右クリックして、[XR]-[AR Session]メニューをクリックしてAR Sessionを追加します。

同様に[XR]-[AR Session Origin]メニューをクリックしてAR Session Originを追加します。

AR Sessionとは

AR Sessionは、ARシーンのプロセスを管理するコンポーネントです。ARFoundationを使うときには必要なコンポーネントだくらいの理解で問題ありません。

AR Session Originとは

AR Session Originは、現実空間の情報をUnity上の「位置、方向、大きさ」に変換してくれるコンポーネントです。
AR Session Originの中には「ARCamera」オブジェクトが含まれていて、アプリが起動されたときのデバイス位置=視点位置=ARCameraの位置ということになります。
「ARCamera」は「MainCamera」とリネームしておくとよいでしょう。

平面検知の追加

ARFundationで現実空間の平面を検知するには「AR Session Origin」に「ARPlane Maneger」を追加するだけで自動的に平面検知が行えます。
「Hierarchy」で「AR Session Origin」を選択し、「Inspector」で「ARPlane Maneger」を追加します。

検知した平面に平面を表示する

「ARPlane Maneger」が検知した平面は、そのままでは人が見える形で何か表示がされるわけではありません。
そこで、検知した平面に平面を表示するように設定します。
どのような表示かは、「ARPlane Maneger」の「Plane Prefab」に指定した内容できまります。

表示用プレハブフォルダの設置

「Project」に「Prefab」フォルダを作成します。

表示オブジェクトの用意

「Hierarchy」を右クリックして、[XR]-[AR Default plane]メニューであらかじめ用意されている平面オブジェクトを追加します。

表示オブジェクトをプレハブ化

「Hierarchy」に追加された「AR Default plane」を「Project」-「Prefab」フォルダにドラッグ&ドロップしてプレハブ化します。

「Hierarchy」上の「AR Default plane」は不要なので削除しておきます。

AR Session Originに表示用プレハブを指定


Cubeの配置

[Hierarchy]で「AR Session Origin」を右クリックして[3D Object]-[Cube]メニューでCubeをARFoundationの管理下で配置します。

Positionは(0, 0, 1)、Rotationは(30, 30, 0)、Scaleは(0,2, 0.2, 0.2)として、1m先に少し回転した立方体を配置します。

Player Settingsの設定

[Fille]-[Build Settings]-[Player Settings]で設定ウィンドウを開いたら、Androidの[Other Settings]の中にある設定を変更します。

Graphics APIs から Vulkan を削除

[Graphics APIs」から「Vulkan」を削除します。

Minimum API Levelの変更

Minimum API Levelを7.0以上に変更します。

XR Plug-in Managementの設定

[Edit]-[Project Settings]で設定ウィンドウを開いたら、[XR Plug-in Management]で[ARCore]にチェックを入れてARCoreの初期化するように指定します。

実機デバッグ

実機準備

Android実機側では、まずは「開発者モード(Developer mode)」に変更して、さらに「USBデバッグ」ができるようにしておきます。

実機接続

Android実機側の準備ができたらUSBにて接続します。
準備がうまくできていると、ここで「USBデバッグを開始する」のようなダイアログが表示されるので、かならず「OK」をクリックします。

Unity側設定

[Run Device]には接続した実機を選択します。
[Development Build]と[Script Debugging]にもチェックをいれておきます。

実機実行

[Build And Run]をクリックして、ビルドと実機転送、そして実行を行います。
youtu.be