Persistance des systèmes de coordonnées spatiales

En général, les avantages des fonctionnalités de persistance de World Locking Tools sont plus intéressants que les détails de leur implémentation.

Cet article commence par une discussion sur les expériences de persistance permises par World Locking Tools. Après cela, nous examinerons la façon dont la persistance de l’état de World Locking Tools peut être gérée. Nous terminerons par un bref aperçu des données qui sont enregistrées et chargées.

World Locking Tools entre sessions

Comme défini sans, l’état figé est l’ensemble des données nécessaires pour reprendre l’espace stable avec verrouillage universel.

L’utilité principale de la persistance de World Locking Tools est d’offrir les avantages du travail d’une session préliminaire, de l’analyse d’une zone et de l’alignement de l’espace virtuel sur le monde réel, à utiliser dans les sessions suivantes.

Le rétablissement de cet état permet aux sessions suivantes d’éviter une configuration fastidieuse ou longue et d’aller directement à l’expérience focale.

Enregistrement de l’état de World Locking Tools

Avant de pouvoir être chargé, l’état figé doit être enregistré.

Le moyen le plus simple d’enregistrer l’état figé consiste à activer l’enregistrement automatique sur le gestionnaire de World Locking Tools, soit dans l’inspecteur Unity sur le contexte World Locking Tools, soit au moment de l’exécution via le script.

La définition de l’état du gestionnaire de World Locking Tools via le script est effectuée en obtenant tout d’abord l’état, en le modifiant de la manière souhaitée, puis en redéfinissant l’état en tant que bloc. Par exemple, pour activer la fonctionnalité d’enregistrement automatique :

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

Si la fonctionnalité d’enregistrement automatique passe d’activée à désactivée au cours d’une session, aucune nouvelle tentative d’enregistrement périodique n’est effectuée. S’il passe de désactivée à activée, les enregistrements périodiques sont démarrés ou repris.

La fonctionnalité d’enregistrement automatique conserve un état d’enregistrement à jour en enregistrant régulièrement l’état actuel de manière asynchrone.

S’il est nécessaire d’avoir un meilleur contrôle sur le moment de l’enregistrement de l’état, l’option AutoSave peut être définie sur False, et la sauvegarde manuelle peut être effectuée par script. L’enregistrement asynchrone est facilement déclenché, car :

WorldLockingManager.GetInstance().Save();

Étant donné que l’enregistrement est asynchrone, les autres tentatives d’appel de Save() pendant un enregistrement précédent sont toujours ignorées.

Chargement de l’état figé

Si vous avez enregistré un état figé, il peut être souhaitable de recharger World Locking Tools dans cet état, soit dans une session ultérieure, soit plus tard dans la même session.

Comme nous le constatons avec l’enregistrement de l’état figé, il existe deux voies pour charger l’état.

Si l’indicateur de chargement automatique du gestionnaire de World Locking Tools est activé, tout état enregistré précédent est chargé au moment du démarrage. S’il n’y a pas d’état enregistré à charger, aucune erreur n’est générée et le démarrage se poursuit comme si l’indicateur n’était pas activé.

L’affectation de la valeur true à l’indicateur AutoLoad (par exemple, via un script) n’a aucun effet. La réinitialisation se produit au niveau du chargement initial ou ne se produit pas du tout.

Toutefois, une charge peut être lancée à partir d’un script à tout moment via la fonction de chargement du gestionnaire de World Locking Tools :

WorldLockingManager.GetInstance().Load();

Comme avec l’enregistrement, le chargement est exécuté de façon asynchrone. Tous les appels suivants à Load alors que l’un d’eux est toujours en cours seront ignorés.

Qu’est-ce qui est enregistré ?

Les données nécessaires à la reconstruction du mappage World Locking Tools, c’est-à-dire l’alignement du monde virtuel sur le monde réel, peuvent être divisées en quatre groupes.

  • Ancres spatiales : le réseau sous-jacent d’ancres spatiales créées et gérées en interne par le Gestionnaire d’ancres de World Locking Tools fournit la liaison nécessaire au monde réel. Ces ancres sont conservées via le mécanisme de stockage sous-jacent de la plateforme.

  • État du moteur : l’état du moteur est persistant pour permettre au moteur de reprendre son mappage actuel. La restauration de cet état supprime des indéterminations telles que la pose initiale de la tête dans la ou les sessions précédentes.

  • Repères spatiaux : si l’application a appliqué des repères spatiaux supplémentaires pour forcer l’alignement des coordonnées de modélisation dans le monde réel à un ensemble discret de points, ce mappage est également conservé.

  • Espace de coordonnées : World Locking Tools garde l’espace de coordonnées relatif au monde physique en enregistrant un graphique interne des ancres spatiales locales.

Qu’est-ce qui n’est pas enregistré ?

Les paramètres ne sont pas enregistrés et World Locking Tools n’enregistre ni ne restaure les objets d’application individuels. Seul l’état est enregistré. Toute modification de la configuration par l’application, par exemple, les modifications apportées par l’API WorldLockingManager, est réinitialisée à ses valeurs telles que définies dans l’inspecteur Unity à chaque démarrage de l’application. Ou, si elles ne sont pas définies dans l’inspecteur, elles sont définies à leurs valeurs par défaut dans le code.

Par exemple, supposons que l’application veuille présenter à l’utilisateur l’option d’enregistrement automatique de l’état de verrouillage universel, et que la préférence de l’utilisateur persiste d’une session à l’autre jusqu’à ce qu’elle soit modifiée. L’application doit alors :

  1. Présentez à l’utilisateur l’expérience utilisateur permettant de définir la préférence d’enregistrement automatique (vraisemblablement avec d’autres paramètres d’application).
  2. Transférez la préférence de l’utilisateur à WorldLockingManager.
  3. Enregistrez la préférence dans un fichier (vraisemblablement avec d’autres paramètres d’application).
  4. Au démarrage de l’application, chargez la préférence sauvegardée (si elle l’a été) et transmettez-la à WorldLockingManager.

Consultez les notes dans WorldLockingContext concernant les problèmes de timing lors du mélange des paramètres d’état entre les ressources et le script.

Voir aussi