Unity で永続化Persistence in Unity

名前空間: UnityEngine.XR.WSA.PersistenceNamespace: 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. セッション間で保持ホログラムが実際には個別に追跡する特定の世界のアンカーを使用する、Gameobject 必要があります。To actually persist holograms across sessions, you will need to separately keep track of your GameObjects that use a particular world anchor. 多くの場合、理にかなって world アンカーを持つ GameObject ルートを作成し、子を持つローカルの位置のオフセットによってホログラムが固定されています。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() とストア。Clear() 以前に保存したすべてのデータを削除します。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.

5 分間試して、Unity での共有エクスペリエンスの構築を開始、空間アンカー Unity の Azure クイック スタートします。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