メインコンテンツまでスキップ

ARライフサイクルの管理

アプリで常にARセッションを実行したいわけではなく、UIだけのシーンもあります。このような場合は、AR関連のサブシステムをすべて非初期化してバッテリーがすぐに消耗しないようにし、アプリが使用するときだけ初期化するのがよいでしょう。

このガイドでは、ARセッションのライフサイクルを管理する方法について説明します。Pretia SDKはUnityのXRサブシステムの上に構築されているため、まずAR Foundationがどのようにライフサイクル管理を行うかについて見ていきます。

Automatic Lifecycle Management

AR Foundation

AR Foundation を Unity プロジェクトにインポートした後、デフォルトでautomatic lifecycle managementが有効になっているはずです。こ

れを確認するには、トップメニューバーの Edit > Project Settings を選択して XR Plug-in Management の設定を開き、設定サイドバーで XR Plug-in Management を探します。これを開くと、Initialize XR on Startup というトグルが表示されます。チェックされていれば、automatic lifecycle managementを使用していることを意味します。

automatic lifecycle managementにより、ビルドターゲットのプロバイダから提供されるすべてのAR関連サブシステムは、起動時に初期化され、アプリケーションが終了したときに非初期化されます。

Pretia SDK

Pretia SDKも同様の設定になっています。Project Settings ウィンドウで、サイドバーからPretia AR Cloud を探します。すると、"Initialize on Startup" というトグルが表示されます。これをチェックするとPretia関連のサブシステムもスタートアップ時に初期化されます。

automatic lifecycle managementは、ARセッションを素早く開始するには良い選択肢ですが、電力使用量の面では効率が悪くなります。

ARセッションを表示していない場合でも基礎となるリソースに電力を消費するため、デバイスのバッテリーの消耗が早くなるためです。

Manual Lifecycle Management

AR Foundation

manual lifecycle managementによって、不要なときに不必要にリソースを使用せずユーザー端末のバッテリーをより長く保つことができます。下記のAPIを呼び出すことで比較的簡単に行うことができます。

using UnityEngine.XR.ARFoundation;

// Call before entering a scene with AR session
LoaderUtility.Initialize();

// Call before exiting the AR session
LoaderUtility.Deinitialize();

Pretia SDK

Pretia SDKも、manual lifecycle managementのためのAPIを提供しています。

// Call before entering a scene with Pretia AR components (e.g., ARSharedAnchorManager)
PretiaArCloud.LoaderUtility.Initialize();

// Call before exiting the AR session
PretiaArCloud.LoaderUtility.Deinitialize();

まとめ

各モジュールはそれぞれ独自のサブシステムを管理しているため、AR FoundationとPretia SDKの両方のAPIコールが必要になります。

using UnityEngine.XR ARFoundation;

// Initialize subsystems
LoaderUtility.Initialize();
PretiaArCloud.LoaderUtility.Initialize();

// Deinitialize subsystems
LoaderUtility.Deinitialize();
PretiaArCloud.LoaderUtility.Deinitialize();