Table of Contents

ARセッションの作成と設定

UnityでARを使用するには、まずシーン内にARセッションを作成し設定する必要があります。この記事では、ARセッションを作成・設定する主な方法を説明します。セッションの作成に成功すると、Hierarchyビューに以下の構造が表示されます:

alt text

開始前に

  • ARSession 概要でセッションの基本概念、構成、ワークフローを理解してください。

デフォルト設定のセッション作成

Hierarchyビューの空白部分を右クリックし、メニューからEasyAR Sense > [ AR 機能 ] > AR Session ([ 機能 ] Preset)を選択すると、プリセットされたセッションを作成できます。セッションには、その機能に適したframe sourceとframe filterコンポーネントが事前に設定されています。

スクリプトでは、ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources)を使用してセッションを作成できます。

例:メニューからEasyAR Sense > Image Tracking > AR Session (Image Tracking Preset)を選択すると、画像トラッキング用のセッションが作成されます。

alt text

対応するスクリプトコード:

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);

注意点:ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilderおよびARSessionFactory.ARSessionPreset.DenseSpatialMapBuilderプリセットを使用する場合、リソースパラメータも必要です。例(点群マテリアルを指定):

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial });

エディター専用スクリプトの場合、デフォルトリソースを使用可能:

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, ARSessionFactory.Resources.EditorDefault());

メニューEasyAR Sense > AR Session (Preset) > **には全てのプリセットがリストされています。

alt text

注記

同一シーンで複数セッションを同時実行すると競合が発生します。有効化された(GameObject.activeInHierarchy == true)セッションは最大1つのみ保持してください。

コンポーネントの追加

セッション作成後、必要に応じてframe sourceやframe filterコンポーネントを追加・削除できます。

Hierarchyビューで**AR Session (EasyAR)**を選択し右クリック、EasyAR Sense > [ AR 機能 ] > **から機能に適したコンポーネントを追加できます。

スクリプトでは、ARSessionFactory.AddFrameSource<Source>(GameObject, bool)でframe sourceを、ARSessionFactory.AddFrameFilter<Filter>(GameObject, ARSessionFactory.Resources)でframe filterを追加できます。

例:メニューEasyAR Sense > Image Tracking > Frame Filter : Image Trackerで選択中セッションに画像トラッカーを追加。

alt text

対応するスクリプトコード:

ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
注意

コンポーネント追加はassemble前に行う必要があります。assemble開始後または完了後にコンポーネントを追加/削除すると、セッションがBroken状態になり動作停止します。

注意点:SparseSpatialMapBuilderFrameFilterおよびDenseSpatialMapBuilderFrameFilter追加時はリソースパラメータが必要です。例(点群マテリアル指定):

ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial })

エディター専用スクリプトの場合:

ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, ARSessionFactory.Resources.EditorDefault());

frame filter作成後、ARSessionFactory.SetupFrameFilters(List<GameObject>, ARSessionFactory.ARSessionPreset)でプリセット設定を適用可能です。

例:画像トラッカーをARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion設定で追加

var filter = ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
ARSessionFactory.SetupFrameFilters(new() { filter }, ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion);

メニュー作成時はパラメータ調整できないため、コンポーネント説明に従い個別設定が必要です。

コンポーネントの削除

セッションからコンポーネントを削除するには、Hierarchyビューで対象コンポーネントを選択しDeleteキーを押すか、スクリプトでオブジェクトを破棄(Destroy)します。

注記

コンポーネントの無効化(SetActive(false))は削除と同じ効果です。

例:セッションから画像トラッカーを削除するにはImage Trackerを選択しDeleteキー。

alt text

注意

コンポーネント削除はassemble前に行う必要があります。assemble開始後または完了後にコンポーネントを追加/削除すると、セッションがBroken状態になり動作停止します。

コンポーネント順序の影響

sessionのframe filter子ノードの順序は動作に影響しません。

sessionのframe source子ノードの順序は、assembleプロセスでの選択順序に影響します。transform順序で最初に利用可能なframe sourceのみが実際のframe sourceとして選択されます。

注記

frame sourceノードの順序変更はassemble前のみ有効です。assemble後の順序変更は実行結果に影響しません。

[オプション] 自由なセッション作成

デフォルト設定が要件を満たさない場合、自由にセッションを作成・設定できます。

メニューEasyAR Sense > AR Session (Preset) > AR Session (Empty)で空のセッションを作成可能です。

スクリプトではARSessionFactory.CreateSession()を使用:

ARSessionFactory.CreateSession();

その後、必要なframe source/frame filterコンポーネントを追加します。

例:疎空間ビルダーと密空間ビルダーを含むセッション作成コード:

var session = ARSessionFactory.CreateSession();

var group = new GameObject("Frame Source Group");
group.transform.SetParent(session.transform, false);

ARSessionFactory.AddFrameSource<XREALFrameSource>(session);
ARSessionFactory.AddFrameSource<AREngineFrameSource>(session);
ARSessionFactory.AddFrameSource<ARCoreFrameSource>(session);
ARSessionFactory.AddFrameSource<ARCoreARFoundationFrameSource>(session);
ARSessionFactory.AddFrameSource<ARKitFrameSource>(session);
ARSessionFactory.AddFrameSource<ARKitARFoundationFrameSource>(session);
ARSessionFactory.AddFrameSource<VisionOSARKitFrameSource>(session);
ARSessionFactory.AddFrameSource<MotionTrackerFrameSource>(session);

List<GameObject> filters = new();
filters.Add(ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, resources));
filters.Add(ARSessionFactory.AddFrameFilter<DenseSpatialMapBuilderFrameFilter>(session, resources));

ARSessionFactory.SetupFrameFilters(filters, ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder);
ARSessionFactory.SetupFrameFilters(filters, ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder);

生成されるセッション構造:

alt text

次のステップ

実行制御

コンポーネントと結果へのアクセス

コンポーネントリファレンス

  • ARSession コンポーネントリファレンス