Compartir a través de


Persistencia de los sistemas de coordenadas espaciales

En general, las ventajas de las funcionalidades de persistencia de World Locking Tools son más interesantes que los detalles de su implementación.

Por lo tanto, este artículo comenzará con un análisis de las experiencias que permite la persistencia de World Locking Tools. Después, veremos cómo puede administrarse la persistencia de estado de World Locking Tools. Por último, cerraremos con un breve esbozo de los datos que se guardan y se cargan.

World Locking Tools entre sesiones

Como se define en otra parte, el estado inmovilizado son todos los datos necesarios para reanudar el espacio estable bloqueado en el mundo actual.

La utilidad principal de la persistencia de World Locking Tools es permitir que las ventajas del trabajo realizado en una sesión preliminar, el examen de un área y la alineación del espacio virtual con el mundo real, se puedan usar en sesiones posteriores.

La restauración de este estado permite que en las sesiones posteriores se pueda acceder directamente a la experiencia central, sin necesidad de configuraciones tediosas o lentas.

Guardar el estado de World Locking Tools

Para poder cargar un estado inmovilizado, antes debe guardarse.

La forma más sencilla de guardar dicho estado es habilitar la opción de autoguardado en el administrador de World Locking Tools, ya sea en el inspector de Unity, en el contexto de World Locking Tools o en tiempo de ejecución mediante un script.

Para establecer el estado del administrador de World Locking Tools mediante un script primero se obtiene el estado, se cambia de la forma deseada y, después, se vuelve a establecer el estado como bloque. Por ejemplo, para activar o desactivar la característica de autoguardado:

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

Si la característica de autoguardado pasa de estar habilitada a deshabilitada durante una sesión, no se intentarán realizar más guardados periódicos. Si pasa de estar deshabilitada a habilitada, se iniciarán o reanudarán los guardados periódicos.

La característica de autoguardado mantendrá un estado guardado actualizado al guardar periódicamente el estado actual de forma asincrónica.

Si se requiere un mayor control sobre la hora a la que se guarda el estado, la opción de autoguardado puede establecerse en false y se puede aplicar el guardado manual mediante un script. El guardado asincrónico se desencadena fácilmente de la siguiente forma:

WorldLockingManager.GetInstance().Save();

Puesto que el guardado es asincrónico, se omitirá cualquier otro intento de invocar a Save() mientras aún se esté ejecutando una acción de guardado anterior.

Carga del estado inmovilizado

Después de haber guardado un estado inmovilizado, puede ser conveniente volver a cargar las World Locking Tools en ese estado, ya sea en una sesión posterior o incluso más adelante en la misma sesión.

Como hemos observado al guardar el estado inmovilizado, existen dos formas para cargar el estado.

Si la marca de autoguardado del administrador de World Locking Tools está habilitada, se cargará cualquier estado guardado anterior al iniciar. Si no hay ningún estado guardado para cargar, no se genera ningún error y el inicio continúa como si la marca no se hubiera establecido.

Establecer la marca de autoguardado de false a true (por ejemplo, mediante un script) en tiempo de ejecución no tendrá ningún efecto. El autoguardado se produce durante la carga inicial o no se produce en absoluto.

Sin embargo, puede iniciarse una carga desde un script en cualquier momento a través de la función de carga Load del administrador de World Locking Tools:

WorldLockingManager.GetInstance().Load();

Al igual que ocurre con la acción de guardar, la carga se realiza de forma asincrónica. Se omitirán todas las llamadas subsiguientes a Load mientras haya una aún en curso.

¿Qué se guarda?

Los datos necesarios para reconstruir la asignación de World Locking Tools (es decir, la alineación del mundo virtual con el mundo real) se pueden dividir en cuatro grupos.

  • Spatial Anchors: la red subyacente de anclajes espaciales que crea y mantiene internamente el administrador de anclajes de World Locking Tools proporciona el enlace necesario con el mundo real. Esos anclajes se conservan mediante el mecanismo de almacenamiento subyacente de la plataforma.

  • Estado del motor: el estado del motor se conserva para permitir que el motor reanude su asignación actual. Al restaurar este estado, se eliminan indeterminaciones tales como la posición inicial de la cabeza en las sesiones anteriores.

  • Marcadores espaciales: si la aplicación ha implementado más marcadores espaciales para forzar la alineación de las coordenadas de modelado con el mundo real en un conjunto diferenciado de puntos, esa asignación también se conserva.

  • Espacio de coordenadas: World Locking Tools conserva el espacio de coordenadas en relación con el mundo físico guardando un gráfico interno de anclajes espaciales locales.

¿Qué no se guarda?

La configuración no se guarda y World Locking Tools no guarda ni restaura objetos de aplicación individuales. Solo se guarda el estado. Los cambios de configuración que realice la aplicación (por ejemplo, los cambios que se realicen a través de la API WorldLockingManager) se restablecen a los valores definidos en el inspector de Unity cada vez que se inicia la aplicación. Si no están establecidos en el inspector, se establecen en los valores predeterminados en el código.

Por ejemplo, digamos que la aplicación quiere ofrecer al usuario la opción de autoguardar el estado de bloqueo del mundo y conservar las preferencias del usuario entre sesiones hasta que se cambien. En ese caso, la aplicación debe hacer lo siguiente:

  1. Ofrecer una experiencia de usuario en la que pueda establecerse la preferencia de autoguardado (probablemente con otras configuraciones de la aplicación).
  2. Reenviar la preferencia del usuario a WorldLockingManager.
  3. Registrar la preferencia en el archivo (probablemente con otras configuraciones de la aplicación).
  4. Cargar la preferencia guardada (si se ha guardado alguna) al iniciar la aplicación y reenviarla a WorldLockingManager.

Consulte las notas de WorldLockingContext sobre los problemas de tiempo al mezclar la configuración de estado entre los recursos y el script.

Consulte también