Share via


Pontos de anexo

Em primeiro lugar, o World Locking Tools fornece um sistema de coordenadas com bloqueio de mundo estável: o espaço com bloqueio de mundo. Esse espaço permanece o mais fixo possível em relação ao mundo físico. E os objetos dentro do espaço com bloqueio de mundo aproveitam recursos que exigem um quadro de referência estável, como manter o posicionamento relativo para outros objetos virtuais, simulação de leis de física natural, cinemática e outras técnicas de animação.

Na verdade, dependendo das necessidades do aplicativo, o espaço com bloqueio de mundo pode ser suficiente para algum ou todo o conteúdo de cena.

Mas, embora o espaço com bloqueio de mundo permaneça alinhado de maneira ideal com o espaço físico, há situações a serem descritas posteriormente, nas quais não é possível que vários pontos no espaço com bloqueio de mundo permaneçam fixos no espaço de coordenadas comum e fixos em relação aos pontos de referência no mundo físico.

Para obter um exemplo corriqueiro, mas esclarecedor, suponha que o sensor mapeie uma âncora para a posição (3,0,0) e outra para a posição (-3,0,0). Posteriormente, à medida que os refinamentos do sensor são processados, é estabelecido que as duas coordenadas devem ter sido (3,0,0) e (-2,0,0). Claramente, não há rotação nem deslocamento que possa ser aplicado à câmera que transformará uma distância de seis metros entre as duas âncoras em um deslocamento de cinco metros.

Usando o sistema de âncora espacial do Unity, as duas âncoras se movem silenciosamente para as posições recém-examinadas.

Mas o World Locking Tools garante que, no espaço com bloqueio de mundo, os objetos que não são móveis "em grande parte" nunca se movam. E, na verdade, qualquer movimento depende do aplicativo proprietário.

Outra condição "anormal" comum é a perda de rastreamento. Quando o rastreamento é perdido em um ambiente (por exemplo, na sala) e recuperado em outro ambiente, a princípio não há informações que vinculem os dois espaços. As coordenadas em um espaço são insignificantes em relação às coordenadas no outro espaço. O paradigma do ponto de anexo permite que o aplicativo lide graciosamente com a fase inicial, quando as informações espaciais sobre o espaço antigo são desconhecidas (por exemplo, ocultando os objetos nesse espaço antigo), bem como com a recuperação, quando a relação espacial entre os dois espaços se torna conhecida.

Mais discussões podem ser encontradas sobre essas condições especiais e as operações de reajuste que o WLT executa para lidar com elas. A discussão aqui se concentra no contrato entre o WLT e o aplicativo para resolver essas condições sem problemas.

Os pontos de anexo são a codificação desse contrato entre o World Locking Tools e o aplicativo. Um aplicativo cria e posiciona os pontos de anexo usando as APIs do World Locking Tools. Quando uma correção na posição de um ponto de anexo é determinada por uma operação de reajuste, o aplicativo é notificado por meio do retorno de chamada da nova posição no espaço com bloqueio de mundo que manterá o ponto de anexo na posição antiga do espaço físico.

Alguns cenários em que os pontos de anexo do World Locking Tools podem ser a solução:

  • É mais importante permanecer fixo em relação aos recursos no mundo físico do que em relação a outros objetos virtuais.
  • Os objetos são posicionados no mundo em runtime, em vez de no Unity em tempo de design, e talvez seja importante reconciliar as posições relativas separadas por interrupções no rastreamento (confira a discussão sobre fragmentos).
  • É importante gerenciar a visibilidade de um objeto com base na validade do posicionamento no espaço físico.

Como usar os pontos de anexo

O uso dos pontos de anexo é bastante simples.

Responsabilidades do cliente

Para cada ponto de anexo necessário, o cliente deve:

  1. Solicitar os pontos de anexo do sistema. Confira CreateAttachmentPoint
  2. Descartar os pontos de anexo que não são mais necessários. Confira ReleaseAttachmentPoint
  3. Informar o sistema da posição inicial e do movimento do ponto de anexo. Confira CreateAttachmentPoint, MoveAttachmentPoint e LtdAttachmentPoint
  4. Resolver os eventos de operação de reajuste. Veja abaixo.

Responsabilidades do World Locking Tools

O World Locking Tools notificará o aplicativo, para cada ponto de anexo afetado, quando ocorrer uma das situações a seguir:

  1. A validade do rastreamento do mundo físico do ponto de anexo é alterada.
  2. As coordenadas no espaço com bloqueio de mundo são alteradas devido a uma operação de reajuste, que pode ser uma mesclagem de fragmentos ou um recongelamento.

Essas notificações são transmitidas por meio de delegados que o aplicativo entrega ao WorldLockingManager na criação do ponto de anexo.

A melhor maneira de lidar com essas notificações é deixada para o aplicativo, pois cada uma terá suas próprias considerações. São fornecidos os manipuladores de exemplo, que são usados internamente e podem ser usados como estão ou como ponto de partida para implementações personalizadas.

Implementações de exemplo

Para um ponto de anexo que deve permanecer fixo no mundo físico e que deve ocultar seu conteúdo quando seu rastreamento não for válido, o AdjusterFixed implementa o AdjustStateDelegate com seu membro HandleAdjustState e o AdjustLocationDelegate com seu membro HandleAdjustLocation. Um componente semelhante para mover objetos está em AdjusterMoving.

Vale a pena observar que fornecer um ou ambos os delegados é opcional e, na verdade, as reações ao estado e às alterações de local podem ser implementadas de acordo com a sondagem, em vez de eventos. Mas, a menos que o uso seja impossível devido às especificações do aplicativo, o sistema baseado em eventos usando delegados forma uma implementação muito mais eficiente.

Recomendamos que você comece com o componente AdjusterFixed (ou AdjusterMoving muito semelhante) e modifique os manipuladores HandleAdjustLocation e HandleAdjustState para atender às necessidades dos aplicativos.

Confira também