Partilhar via


Pontos de fixação

Em primeiro lugar, o World Locking Tools fornece um sistema de coordenadas estável bloqueado pelo mundo: o espaço bloqueado pelo mundo. Este espaço permanece o mais fixo possível em relação ao mundo físico. E os objetos dentro do espaço bloqueado do mundo desfrutam de capacidades que exigem um quadro de referência estável, como manter a colocação relativa em relação a outros objetos virtuais, simulação de leis da física natural, cinemática e outras técnicas de animação.

Na verdade, dependendo das necessidades do aplicativo, o espaço bloqueado no mundo pode ser suficiente para parte ou todo o conteúdo da cena.

Mas, embora o espaço bloqueado no mundo permaneça perfeitamente alinhado com o espaço físico, há situações a serem descritas mais adiante em que não é possível que vários pontos no espaço bloqueado do mundo permaneçam fixos em seu espaço coordenado comum e fixos em relação aos pontos de referência no mundo físico.

Para um exemplo trivial, 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). Mais tarde, à medida que os refinamentos do sensor são processados, estabelece-se que as duas coordenadas deveriam ter sido (3,0,0) e (-2,0,0). Claramente, não há rotação e deslocamento que possam ser aplicados à câmera que transformará uma distância de seis metros entre as duas âncoras em um deslocamento de cinco metros.

Usando o sistema de ancoragem espacial do Unity, as duas âncoras se moviam silenciosamente para suas posições recém-digitalizadas.

Mas a World Locking Tools garante que, no espaço bloqueado pelo mundo, os objetos que não se movem "principalmente" nunca se moverão. E, de fato, qualquer movimento cabe ao próprio aplicativo.

Outra condição "anormal" comum é a perda de rastreamento. Quando o rastreamento é perdido em um ambiente (por exemplo, sala) e recuperado em outro ambiente, então, a princípio, não há informações ligando os dois espaços. As coordenadas em um espaço não têm sentido em relação às coordenadas no outro espaço. O paradigma do ponto de ligação permite que a aplicação lide graciosamente com a fase inicial quando a informação espacial sobre o espaço antigo é desconhecida (por exemplo, escondendo os objetos nesse espaço antigo), bem como recupere quando a relação espacial entre os dois espaços se torna conhecida.

Mais discussão pode ser encontrada sobre essas condições especiais e as operações de refit que a WLT realiza para lidar com elas. A discussão aqui está centrada no contrato entre a WLT e a aplicação na resolução suave de tais condições.

Os pontos de anexo são a codificação desse contrato entre a World Locking Tools e a aplicação. Um aplicativo cria e posiciona pontos de anexo usando as APIs das Ferramentas de Bloqueio Mundial. Quando uma correção na posição de um ponto de fixação é determinada por uma operação de refit, o aplicativo é notificado via retorno de chamada da nova posição no espaço bloqueado mundial que manterá o ponto de conexão em sua posição antiga no espaço físico.

Alguns cenários em que os pontos de anexo das Ferramentas de Bloqueio Mundial podem ser a solução:

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

Usando pontos de fixação

O uso de pontos de fixação é bastante simples.

Responsabilidades do cliente

Para cada ponto de fixação necessário, o cliente deve:

  1. Solicite pontos de anexo do sistema. Consulte CreateAttachmentPoint
  2. Elimine os pontos de fixação que já não são necessários. Consulte ReleaseAttachmentPoint
  3. Avalie o sistema da posição inicial e do movimento do ponto de fixação. Consulte CreateAttachmentPoint, MoveAttachmentPoint e TeleportAttachmentPoint
  4. Manipule eventos de operação de refit. Ver abaixo.

Responsabilidades da World Locking Tools

As Ferramentas de Bloqueio Mundial notificarão o aplicativo, para cada ponto de anexo afetado, quando ocorrer uma das seguintes situações:

  1. A validade das alterações de rastreamento do mundo físico do ponto de anexo.
  2. Suas coordenadas no espaço bloqueado do mundo mudam devido a uma operação de refit, que pode ser uma fusão de fragmentos ou um recongelamento.

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

A melhor forma de lidar com essas notificações é deixada para o aplicativo, pois cada um terá suas próprias considerações. 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, são fornecidos.

Exemplos de implementações

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 é válido, AdjusterFixed implementa o AdjustStateDelegate com seu membro HandleAdjustState e o AdjustLocationDelegate com seu membro HandleAdjustLocation. Um componente semelhante para objetos em movimento está em AdjusterMoving.

Vale a pena notar que o fornecimento de um ou ambos os delegados é opcional e, de fato, as reações às mudanças de estado e localização podem ser implementadas com base em pesquisas e não em eventos. Mas a menos que seu uso seja impossível devido a especificidades 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 de seus aplicativos.

Consulte também