Persistance dans UnityPersistence in Unity

Espace de noms : UnityEngine. XR. WSA. persistanceNamespace: UnityEngine.XR.WSA.Persistence
Classe : WorldAnchorStoreClass: WorldAnchorStore

Le WorldAnchorStore est la clé de la création d’expériences holographiques dans lesquelles les hologrammes restent dans des positions réelles spécifiques entre les instances de l’application.The WorldAnchorStore is the key to creating holographic experiences where holograms stay in specific real world positions across instances of the application. Les utilisateurs peuvent ensuite épingler des hologrammes individuels où ils le souhaitent, et les trouver plus tard dans les mêmes cas sur de nombreuses utilisations de votre application.Users can then pin individual holograms wherever they want, and find them later in the same spot over many uses of your app.

Comment conserver des hologrammes entre les sessionsHow to persist holograms across sessions

Le WorldAnchorStore vous permet de conserver l’emplacement des WorldAnchor entre les sessions.The WorldAnchorStore will allow you to persist the location of WorldAnchor's across sessions. Pour conserver les hologrammes entre les sessions, vous devez effectuer un suivi séparé de vos GameObjects qui utilisent une ancre mondiale particulière.To actually persist holograms across sessions, you'll need to separately keep track of your GameObjects that use a particular world anchor. Il est souvent judicieux de créer une racine GameObject avec une ancre mondiale et de faire en sorte que les hologrammes enfants soient ancrés avec un décalage de position local.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.

Pour charger des hologrammes à partir de sessions précédentes :To load holograms from previous sessions:

  1. Obtient le WorldAnchorStoreGet the WorldAnchorStore
  2. Charger les données d’application relatives à l’ancre mondiale, qui vous donne l’ID du point d’ancrageLoad app data relating to the world anchor, which gives you the ID of the world anchor
  3. Charger une ancre universelle à partir de son IDLoad a world anchor from its ID

Pour enregistrer des hologrammes pour les sessions à venir :To save holograms for future sessions:

  1. Obtient le WorldAnchorStoreGet the WorldAnchorStore
  2. Enregistrer une ancre mondiale en spécifiant un IDSave a world anchor specifying an ID
  3. Enregistrer les données d’application relatives à l’ancre mondiale avec un IDSave app data relating to the world anchor along with an ID

Obtention du WorldAnchorStoreGetting the WorldAnchorStore

Il est préférable de conserver une référence à WorldAnchorStore afin de savoir quand il est prêt à effectuer une opération.You'll want to keep a reference to the WorldAnchorStore so you know when it's ready to perform an operation. Étant donné qu’il s’agit d’un appel asynchrone, éventuellement dès le démarrage, vous souhaitez appeler :Since this is an async call, potentially as soon as start up, you want to call:

WorldAnchorStore.GetAsync(StoreLoaded);

Dans ce cas, StoreLoaded est notre gestionnaire pour la fin du chargement du WorldAnchorStore :StoreLoaded in this case is our handler for when the WorldAnchorStore has completed loading:

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

Nous avons maintenant une référence à WorldAnchorStore, que nous allons utiliser pour enregistrer et charger des ancres universelles spécifiques.We now have a reference to the WorldAnchorStore, which we'll use to save and load specific World Anchors.

Enregistrement d’un WorldAnchorSaving a WorldAnchor

Pour ce faire, nous devons simplement nommer ce que nous enregistrons et le transférer dans le WorldAnchor que nous avons reçu avant l’enregistrement.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. Remarque : la tentative d’enregistrement de deux ancres dans la même chaîne échoue (Store. L’enregistrement retourne la valeur false).Note: trying to save two anchors to the same string will fail (store.Save will return false). Supprimer le précédent enregistrement avant d’en enregistrer un nouveau :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);
       }
}

Chargement d’un WorldAnchorLoading a WorldAnchor

Et pour charger :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
       }
}

Nous pouvons également utiliser le Store. Delete () pour supprimer une ancre précédemment enregistrée et stockée. Clear () pour supprimer toutes les données précédemment enregistrées.We additionally can use store.Delete() to remove an anchor we previously saved and store.Clear() to remove all previously saved data.

Énumération des ancres existantesEnumerating Existing Anchors

Pour découvrir les ancres précédemment stockées, appelez 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]);
}

Persistance des hologrammes pour plusieurs appareilsPersisting holograms for multiple devices

Vous pouvez utiliser des ancres spatiales Azure pour créer une ancre Cloud durable à partir d’un WorldAnchor local, que votre application peut ensuite localiser sur plusieurs appareils HoloLens, iOS et Android, même si ces appareils ne sont pas présents simultanément.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 aren't present together at the same time. Étant donné que les ancres Cloud sont persistantes, plusieurs périphériques peuvent voir le contenu affiché par rapport à cette ancre dans le même emplacement physique.Because cloud anchors are persistent, multiple devices over time can each see content rendered relative to that anchor in the same physical location.

Pour commencer à créer des expériences partagées dans Unity, essayez les Démarrages rapides de 5 minutes d' Unity spatiales Azure Unity.To get started building shared experiences in Unity, try out the 5-minute Azure Spatial Anchors Unity quickstarts.

Une fois que vous êtes opérationnel avec les ancres spatiales Azure, vous pouvez créer et localiser des ancres dans Unity.Once you're up and running with Azure Spatial Anchors, you can then create and locate anchors in Unity.

Point de contrôle de développement suivantNext Development Checkpoint

Si vous suivez le parcours du point de contrôle de développement Unity que nous avons mis en place, vous êtes au cœur de l’exploration des blocs de construction de la réalité mixte.If you're following the Unity development checkpoint journey we've laid out, you're in the midst of exploring the Mixed Reality core building blocks. À partir de là, vous pouvez passer au module suivant :From here, you can continue to the next building block:

Ou accéder aux API et fonctionnalités de la plateforme Mixed Reality :Or jump to Mixed Reality platform capabilities and APIs:

Vous pouvez revenir aux points de contrôle de développement Unity à tout moment.You can always go back to the Unity development checkpoints at any time.

Voir aussiSee Also