空間座標系の永続化

一般に、World Locking Tools の永続化機能の利点は、それらの実装の詳細よりも重要です。

この記事では、World Locking Tools の永続性によって実現されるエクスペリエンスについて説明します。 その後、World Locking Tools の状態の永続性をどのように管理するかを確認します。 次に、保存と読み込みの対象となるデータについて簡単に説明します。

セッションをまたぐ World Locking Tools

他の箇所で定義されているように、Frozen 状態は、現在のワールドロック安定空間を再開するために必要なすべてのデータです。

World Locking Tools の永続性の主な有用性として、予備セッションの作業の利点の利用、領域のスキャン、実際の世界に合わせた仮想空間の調整があり、後続のセッションで使用できます。

この状態を復元することで、後続のセッションにおいて面倒で時間のかかるセットアップを行わずに、焦点を絞ったエクスペリエンスに直接アクセスできます。

World Locking Tools の状態を保存する

Frozen 状態は、読み込む前に保存する必要があります。

Frozen 状態を保存する最も簡単な方法は、World Locking Tools Context の Unity インスペクターを使用するか、実行時にスクリプトを使用して、World Locking Tools Manager で自動保存を有効にすることです。

スクリプトを介してWorld Locking Tools Manager の状態を設定するには、まず、状態を取得し、任意の方法で変更してから、状態をブロックとして設定し直します。 たとえば、AutoSave 機能を切り替えるには、次のようにします。

var settings = WorldLockingManger.GetInstance().Settings;
settings.AutoSave = !settings.AutoSave;
WorldLockingManager.GetInstance().Settings = settings;

セッション中に AutoSave 機能が有効から無効になった場合は、それ以上は定期的な保存が試行されません。 無効から有効にすると、定期的な保存が開始または再開されます。

AutoSave 機能は、現在の状態を非同期で定期的に保存することにより、最新の保存状態を維持します。

状態の保存のタイミングをさらに制御する必要がある場合は、AutoSave を false に設定し、スクリプトを介して手動で保存することができます。 非同期の保存は、次のように簡単にトリガーされます。

WorldLockingManager.GetInstance().Save();

保存は非同期であるため、前の保存がまだ進行中の間に Save() の呼び出しを試行しても、無視されます。

Frozen 状態の読み込み

Frozen 状態を保存した後、後続のセッションまたは同じセッションの後で、World Locking Tools をその状態に再読み込みすることが望ましい場合があります。

Frozen 状態の保存と同様に、状態を読み込むための 2 つのパスがあります。

World Locking Tools Manager の AutoLoad フラグが有効になっている場合は、以前に保存された状態が起動時に読み込まれます。 読み込む保存状態がない場合は、エラーは生成されず、フラグが設定されていない場合と同様に起動が続行されます。

実行時に AutoLoad フラグを false から true に設定しても (たとえば、スクリプトを介して)、効果はありません。 AutoLoad は、初期読み込み時に行われるか、まったく行われません。

ただし、読み込みは、World Locking Tools Manager の Load 機能を介していつでもスクリプトから開始できます。

WorldLockingManager.GetInstance().Load();

保存と同様に、読み込みも非同期的に実行されます。 1 つがまだ進行中の間は、Load への後続の呼び出しはすべて無視されます。

保存対象

World Locking Tools のマッピングを再構築するために必要なデータ (つまり仮想世界と現実世界の位置合わせ) は、4 つのグループに分けることができます。

  • Spatial Anchors: World Locking Tools の Anchor Manager によって内部で作成されて維持される空間アンカーの基盤となるネットワークは、不可欠な現実世界とのバインドを提供します。 このようなアンカーは、ストレージ メカニズムの基盤となるプラットフォームを介して永続化されます。

  • エンジンの状態: エンジンの状態が永続化されるため、エンジンは現在のマッピングを再開できます。 この状態を復元することで、前のセッションの先頭の最初のポーズなどの不確定要素が排除されます。

  • スペース ピン留め: アプリケーションが追加のスペース ピンを適用して、個別のポイント セットでモデリング座標を実世界に強制的に位置合わせした場合、そのマッピングも永続化されます。

  • 座標空間: World Locking Tools は、ローカル空間アンカーの内部グラフを保存することで、物理世界に対して相対的に座標空間を永続化します。

保存対象外

設定は保存されず、World Locking Tools では個々のアプリケーション オブジェクトは保存または復元されません。 状態のみが保存されます。 アプリケーションによる構成の変更 (WorldLockingManager API を介して行われた変更など) は、アプリケーションが起動するたびに Unity Inspector で設定された値にリセットされます。 または、Inspector で設定されていない場合は、コードの既定値にリセットされます。

たとえば、アプリケーション側が World Locking 状態を自動保存するオプションをユーザーに提示し、変更されるまでユーザー設定をセッション間で維持しようとしたとします。 次に、アプリケーション側では次のことを行う必要があります。

  1. AutoSave の設定を行うための UX をユーザーに提示する (他のアプリケーションを使用する場合もある)。
  2. ユーザー設定を WorldLockingManager に転送する。
  3. 設定をファイルに記録する (他のアプリケーションを使用する場合もある)。
  4. アプリケーションの起動時に、保存された設定 (保存されている場合) を読み込み、WorldLockingManager に転送する。

アセットとスクリプトの間で状態設定を混在させるタイミングの問題については、 WorldLockingContext のメモを参照してください。

関連項目