Unity での永続化Persistence in Unity

名前空間: UnityEngine. XRNamespace: UnityEngine.XR.WSA.Persistence
クラス: WorldAnchorStoreClass: WorldAnchorStore

WorldAnchorStore は、ホログラムがアプリケーションのインスタンス間で特定の実際の位置に置かれる holographic エクスペリエンスを作成するための鍵です。The WorldAnchorStore is the key to creating holographic experiences where holograms stay in specific real world positions across instances of the application. これにより、ユーザーは必要に応じて個々のホログラムまたはワークスペースをピン留めし、アプリの多くの使用を想定している場所で後から検索することができます。This lets your users pin individual holograms or a workspace wherever they want it, and then find it later where they expect over many uses of your app.

セッション間でホログラムを永続化する方法How to persist holograms across sessions

WorldAnchorStore を使用すると、WorldAnchor の場所をセッション間で永続化することができます。The WorldAnchorStore will allow you to persist the location of WorldAnchor's across sessions. セッション間でホログラムを永続化するには、特定のワールドアンカーを使用するユーザーオブジェクトを個別に追跡する必要があります。To actually persist holograms across sessions, you will need to separately keep track of your GameObjects that use a particular world anchor. 多くの場合、ワールドアンカーを使用して作成オブジェクトのルートを作成し、ローカル位置のオフセットを使用して子のホログラムを固定することが理にかなっています。It often makes sense to create a GameObject root with a world anchor and have children holograms anchored by it with a local position offset.

以前のセッションからホログラムを読み込むには:To load holograms from previous sessions:

  1. WorldAnchorStore を取得するGet the WorldAnchorStore
  2. ワールドアンカーに関連するアプリデータを読み込んで、ワールドアンカーの id を提供しますLoad app data relating to the world anchor which gives you the id of the world anchor
  3. Id からワールドアンカーを読み込みますLoad a world anchor from its id

将来のセッションのホログラムを保存するには:To save holograms for future sessions:

  1. WorldAnchorStore を取得するGet the WorldAnchorStore
  2. Id を指定してワールドアンカーを保存するSave a world anchor specifying an id
  3. Id と共に世界のアンカーに関連するアプリデータを保存するSave app data relating to the world anchor along with an id

WorldAnchorStore を取得するGetting the WorldAnchorStore

WorldAnchorStore への参照を保持して、操作を実行する準備ができていることを確認します。We will want to keep a reference to the WorldAnchorStore around so we know we are ready to go when we want to perform an operation. これは非同期呼び出しであるため、起動直後にを呼び出す必要があります。Since this is an async call, potentially as soon as start up, we want to call

WorldAnchorStore.GetAsync(StoreLoaded);

この場合、StoreLoaded は、WorldAnchorStore が読み込みを完了したときのハンドラーです。StoreLoaded in this case is our handler for when the WorldAnchorStore has completed loading:

private void StoreLoaded(WorldAnchorStore store)
{
       this.store = store;
}

ここでは、特定のワールドアンカーを保存して読み込むために使用する WorldAnchorStore への参照を取得しました。We now have a reference to the WorldAnchorStore which we will use to save and load specific World Anchors.

WorldAnchor の保存Saving a WorldAnchor

保存するには、保存する内容に名前を付け、保存する前に WorldAnchor に渡す必要があります。To save, we simply need to name what we are saving and pass it in the WorldAnchor we got before when we want to save. 注: 2 つのアンカーを同じ文字列に保存しようとすると失敗します (ストア。保存すると false が返されます)。Note: trying to save two anchors to the same string will fail (store.Save will return false). 新しい保存を保存する前に、前の保存を削除する必要があります。You need to Delete the previous save before saving the new one:

private void SaveGame()
{
       // Save data about holograms positioned by this world anchor
       if (!this.savedRoot) // Only Save the root once
       {
              this.savedRoot = this.store.Save("rootGameObject", anchor);
              Assert(this.savedRoot);
       }
}

WorldAnchor を読み込んでいますLoading a WorldAnchor

読み込み:And to load:

private void LoadGame()
{
       // Save data about holograms positioned by this world anchor
       this.savedRoot = this.store.Load("rootGameObject", rootGameObject);
       if (!this.savedRoot)
       {
              // We didn't actually have the game root saved! We have to re-place our objects or start over
       }
}

また、ストアを使用することもできます。Delete () を削除して、以前に保存して保存したアンカーを削除します。以前に保存したデータをすべて削除するには、() をクリアします。We additionally can use store.Delete() to remove an anchor we previously saved and store.Clear() to remove all previously saved data.

既存のアンカーの列挙Enumerating Existing Anchors

以前に保存されたアンカーを検出するには、GetAllIds を呼び出します。To discover previously stored anchors, call GetAllIds.

string[] ids = this.store.GetAllIds();
for (int index = 0; index < ids.Length; index++)
{
        Debug.Log(ids[index]);
}

複数のデバイスのホログラムの永続化Persisting holograms for multiple devices

Azure 空間アンカーを使用して、ローカル WorldAnchor から持続性のあるクラウドアンカーを作成できます。これにより、アプリは複数の HoloLens、iOS、および Android デバイスが同時に存在しない場合でも、そのデバイスを検索できます。You can use Azure Spatial Anchors to create a durable cloud anchor from a local WorldAnchor, which your app can then locate across multiple HoloLens, iOS and Android devices, even if those devices are not present together at the same time. クラウドアンカーは永続的であるため、複数のデバイスが一定期間にわたって、同じ物理的な場所にあるそのアンカーを基準としてレンダリングされたコンテンツを表示できます。Because cloud anchors are persistent, multiple devices over time can each see content rendered relative to that anchor in the same physical location.

Unity で共有エクスペリエンスの構築を開始するには、5分間のAzure 空間アンカー unity クイックスタートをお試しください。To get started building shared experiences in Unity, try out the 5-minute Azure Spatial Anchors Unity quickstarts.

Azure 空間アンカーを使用して実行した後は、 Unity でアンカーを作成して見つけることができます。Once you're up and running with Azure Spatial Anchors, you can then create and locate anchors in Unity.

関連項目See Also