Puntos de conexión
Ante todo, World Locking Tools proporciona un sistema de coordenadas bloqueado en el mundo estable: el espacio bloqueado en el mundo. Este espacio permanece lo más fijo posible en relación con el mundo físico. Y los objetos del espacio bloqueado en el mundo disfrutan de funcionalidades que requieren este fotograma estable de referencia, como el mantenimiento de la colocación relativa en otros objetos virtuales, la simulación de leyes de la física natural, la cinemática y otras técnicas de animación.
De hecho, en función de las necesidades de la aplicación, el espacio bloqueado en el mundo puede ser suficiente para todo el contenido de la escena o parte del mismo.
Pero, aunque el espacio bloqueado en el mundo permanecerá alineado de forma óptima con el espacio físico, hay situaciones que se describen más adelante en las que no es posible que varios puntos del espacio bloqueado en el mundo permanezcan fijos en su espacio de coordenadas común y fijos en relación con los puntos de referencia en el mundo físico.
Para obtener un ejemplo trivial pero revelador, supongamos que el sensor asigna un anclaje a la posición (3,0,0) y otro a la posición (-3,0,0). Más adelante, a medida que se procesan las mejoras del sensor, se establece que las dos coordenadas deben haber sido (3,0,0) y (-2,0,0). Claramente, no hay ninguna rotación ni desplazamiento que se pueda aplicar a la cámara que transformará una distancia de seis metros entre los dos anclajes en un desplazamiento de cinco metros.
Con el sistema de anclaje espacial de Unity, los dos anclajes simplemente se moverían de forma silenciosa a sus posiciones recién examinadas.
Sin embargo, World Locking Tools garantiza que, en el espacio bloqueado en el mundo, los objetos no móviles "casi" nunca se muevan. De hecho, todo movimiento depende de la aplicación propietaria.
Otra condición "anómala" común es la pérdida del seguimiento. Cuando el seguimiento se pierde en un entorno (por ejemplo, en una sala) y se recupera en otro, al principio no hay ninguna información que vincule los dos espacios. Las coordenadas de un espacio carecen de sentido en relación con las coordenadas del otro espacio. El paradigma del punto de conexión permite que la aplicación controle eficazmente la fase inicial cuando se desconozca la información espacial sobre el espacio antiguo (por ejemplo, ocultando los objetos de ese espacio antiguo), así como recuperarse cuando se conozca la relación espacial entre los dos espacios.
Se puede obtener más información de estas condiciones especiales y las operaciones de reajuste que realiza WLT para controlarlas. Esta información se centra en el contrato entre WLT y la aplicación para resolver sin problemas estas condiciones.
Los puntos de conexión son la codificación de ese contrato entre World Locking Tools y la aplicación. Una aplicación crea y coloca puntos de conexión mediante las API de World Locking Tools. Cuando una operación de reajuste determina una corrección en la posición de un punto de conexión, la aplicación se notifica a través de la devolución de llamada de la nueva posición en el espacio bloqueado en el mundo que mantendrá el punto de conexión en su posición anterior en el espacio físico.
Algunos escenarios en los que los puntos de conexión de World Locking Tools podrían ser la solución:
- Es más importante permanecer fijo en relación con las características del mundo físico que en relación con otros objetos virtuales.
- Los objetos se colocan en el mundo en tiempo de ejecución en lugar de en Unity en tiempo de diseño, y puede ser importante conciliar posiciones relativas separadas por interrupciones en el seguimiento (consulte la información sobre fragmentos).
- Es importante administrar la visibilidad de un objeto en función de la validez de su posicionamiento del espacio físico.
Uso de puntos de conexión
El uso de puntos de conexión resulta bastante sencillo.
Responsabilidades del cliente
Para cada punto de conexión necesario, el cliente debe:
- Solicitar puntos de conexión del sistema. Consulte CreateAttachmentPoint
- Eliminar los puntos de conexión que ya no son necesarios. Consulte ReleaseAttachmentPoint
- Informar al sistema de la posición y el movimiento iniciales del punto de conexión. Consulte CreateAttachmentPoint, MoveAttachmentPoint y TeleportAttachmentPoint
- Controlar eventos de operación de reajuste. Véase a continuación.
Responsabilidades de World Locking Tools
World Locking Tools notificará a la aplicación, para cada punto de conexión afectado, cuando se produzca alguna de las siguientes situaciones:
- La validez de los cambios en el seguimiento del mundo físico del punto de conexión.
- Sus coordenadas en el espacio bloqueado en el mundo cambian debido a una operación de reajuste, que puede ser una combinación de fragmentos o una reinmovilización.
Estas notificaciones se difunden a través de delegados que la aplicación da a WorldLockingManager al crear el punto de conexión.
La forma de controlar mejor estas notificaciones se deja a la aplicación, ya que cada una tendrá sus propias consideraciones. Se proporcionan controladores de ejemplo, que se usan internamente y se pueden usar tal cual o como punto de partida para implementaciones personalizadas.
Implementaciones de ejemplo
Para un punto de conexión que va a permanecer fijo en el mundo físico y que debe ocultar su contenido cuando su seguimiento no es válido, AdjusterFixed implementa AdjustStateDelegate con su miembro HandleAdjustState y AdjustLocationDelegate con su miembro HandleAdjustLocation. Un componente similar para mover objetos está en AdjusterMoving.
Merece la pena tener en cuenta que el suministro de ambos delegados o cualquiera de los mismos es opcional y, de hecho, las reacciones a los cambios de estado y ubicación pueden implementarse tomando como base el sondeo en lugar de eventos. Pero, a menos que su uso sea imposible debido a los detalles de la aplicación, el sistema basado en eventos que usa delegados forma una implementación mucho más eficaz.
Se recomienda comenzar con el componente AdjusterFixed (o AdjusterMoving, muy similar) y modificar los controladores HandleAdjustLocation y HandleAdjustState para satisfacer las necesidades de las aplicaciones.