見出し画像

AR Foundation 3.0 入門

1. AR Foundation

AR Foundation」は、「Unity」を使ってiOSとAndroidで動作する「ARアプリケーション」を作成するためのパッケージです。主な機能は次の通りです。

・World tracking : 物理空間でのデバイスの位置と方向を追跡。
・Plane detection : 水平および垂直面の検出。
・Point cloud : 特徴点の検出。
・Reference point : デバイスが追跡する任意の位置と方向の検出。
・Light estimation : 物理空間の光源と輝度の推定。
・Face tracking : 人間の顔の検出。
・Image tracking : 2D画像の検出。
・Object tracking : 3Dオブジェクトの検出。

2. AR Foundationのインストール

「AR Foundation」は、Unityの「Package Manager」を使ってインストールします。「AR Foundation」を使用するには、少なくとも1つのプラットフォーム固有のARパッケージをインストールする必要があります。

・ARKit XRプラグイン (iOS用)
・ARCore XRプラグイン (Android用)

インストール手順は次の通りです。

(1)「Unity 2019.2以降」でプロジェクトを作成。
(2) メニュー「Window → Package Manager」を選択。
(3)「Advanced → Show preview packages」を選択。
(4)「AR Foundation 3.0.0」を選択して「Install」ボタンを押す。
(5)「ARKit XR Plugin 3.0.0」を選択して「Install」ボタンを押す。

画像1

3. AR Foundationの基本階層

「AR Foundation」の基本階層は次のようになります。

この階層を作成するには、メニュー「GameObject → XR → AR Session」で「ARSessionオブジェクト」を追加し、メニュー「GameObject → XR → AR Session Origin」で「ARSessionOriginオブジェクト」を追加します。

画像2

◎ARSessionオブジェクト
「ARSessionオブジェクト」は、ARエクスペリエンスのライフサイクルを制御するオブジェクトです。「AR Foundation」には必須のオブジェクトになります。以下の2つのスクリプトが含まれています。

・ARSessionスクリプト
・ARInputManagerスクリプト

画像3

◎ARSessionOriginオブジェクト
「ARSessionOriginオブジェクト」は、ARアプリ開始時の端末の位置の原点となるオブジェクトです。このオブジェクトの子ノードとして、AR空間内のカメラや3Dオブジェクトを配置します。以下のスクリプトと子ノードが追加されています。

・ARSessionOriginスクリプト
・ARCameraオブジェクト

画像4

◎ARCameraオブジェクト
「ARCameraオブジェクト」は、AR空間内のカメラのオブジェクトです。現実空間内のカメラ位置と、AR空間内のカメラの位置を同期させることで、拡張現実を実現します。以下の3つのスクリプトが追加されています。

・TrackedPoseDriverスクリプト
・ARCameraManagerスクリプト
・ARCameraBackgroundスクリプト

画像5

4. 平面検出

平面を検出して表示する機能を追加します。

◎ARPlaneManagerスクリプトの追加
(1)「ARSessionOriginオブジェクト」に、「ARPlaneManagerスクリプト」を追加。
(2)「ARPlaneManagerスクリプト」の「Detection Mode」に「Everything」を指定。これは検出する平面の種類で、設定項目は次の4種類になります。

・Nothing : なし
・Everything : 両方
・Horizontal : 水平面
・Vertical : 垂直面

画像6

◎Plane Prefabの指定
次に平面検出した時に表示する「Plane Prefab」を指定します。

(1) メニュー「GameObject → XR → AR Default Plane」を選択し、シーンに「ARDefaultPlaneオブジェクト」を追加。
(2)「ARDefaultPlaneオブジェクト」をProjectウィンドウにドラッグ&ドロップし、Prefab化。
(3) Prefab化した「ARDefaultPlaneオブジェクト」を「ARPlaneManagerスクリプト」の「Plane Prefab」にドラッグ&ドロップ。
(4) シーン内に追加したままの「ARDefaultPlaneオブジェクト」を削除。

5. 画面のタッチ検出

検出平面のタッチ時に、3Dオブジェクトを配置する機能を追加します。

(1)「ARSessionOriginオブジェクト」に「ARRaycastManagerスクリプト」を追加。
(2)「ARSessionOriginオブジェクト」に新規スクリプト「CreateObjectスクリプト」を追加。
(3)「CreateObjectスクリプト」に以下のコードを入力。

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;

[RequireComponent(typeof(ARRaycastManager))]
public class CreateObject : MonoBehaviour {
   [SerializeField]
   GameObject objectPrefab;

   ARRaycastManager raycastManager;
   List<ARRaycastHit> hitResults = new List<ARRaycastHit>();

   //初期化
   void Awake() {
       raycastManager = GetComponent<ARRaycastManager>();
   }

   //更新毎に呼ばれる
   void Update() {
       //タッチ時
       if (Input.GetMouseButtonDown(0)) {
           //衝突時
           if (raycastManager.Raycast(Input.GetTouch(0).position, hitResults)) {
               //3Dオブジェクトの生成
               Instantiate(objectPrefab, hitResults[0].pose.position, Quaternion.identity);
           }
       }
   }
}

(4)「CreateObjectスクリプト」の「Object Prefab」に表示したい3Dオブジェクト(CubeでもOK)を指定。

6. iOSアプリでの実行

ARアプリはUnityエディタ上では動作しません。iOSアプリにビルドして、実際に動かしてみます。

(1) メニュー「File → Build Setting → Player Settings」を選択。
(2)「Player」の「Other Settings」で以下の設定を行う。

・Camera Usage Description : AR機能にカメラを使います。
・Target minimum iOS Version : 12.0
・Architecture : ARM64

画像7

(3) Build Settingsで、「Scenes In Build」にシーンを追加し、「Platform」でiOSを選択し、Buildボタンを押す。
成功すると、Xcodeのプロジェクトが生成されます。

(4) Xcodeのプロジェクトから、通常のiOSの開発方法と同様に、iOSアプリをビルドし、iPhoneにインストール。

画像8




この記事が気に入ったらサポートをしてみませんか?