Tocar para posicionar – MRTK3

Toque para posicionar é um solucionador usado para posicionar um objeto de jogo na superfície da malha de SR (reconstrução de cena) do ambiente ao redor do usuário. Toque para Posicionar usa uma combinação de duas seleções e movimento da cabeça para posicionar um objeto. Você pode iniciar o posicionamento com uma única seleção, usar o movimento da cabeça para controlar a posição do objeto e posicionar o objeto na cena com outra ação de seleção.

Como usar

  1. Configurar a cena.

    • Criar uma cena do Unity.
    • Adicione um cubo à cena, altere a escala para 0,2 e altere a posição para (0, 0, 0,7).
  2. Anexar "Tocar para Posicionar" a um objeto de jogo com um colisor.

    • Quando o componente Toque para Posicionar for adicionado, um Manipulador do Solucionador também será anexado. O Toque para Posicionar deriva da classe Solucionador que requer um Manipulador do Solucionador. A posição de um objeto Toque para Posicionar é calculada em relação ao TrackedTargetType no Manipulador do Solucionador. Por padrão, a Cabeça é o TrackedTargetType, ou seja, quando ela se move, o objeto a segue quando está selecionado. TrackedTargetType também pode ser definido como Raio do Controlador, que faz com que o objeto siga o controlador. O primeiro grupo de propriedades no inspetor do Toque para Posicionar são as Propriedades Comuns do Solucionador.

    Importante

    Toque para Posicionar é um Solucionador autônomo e não pode ser encadeado com outros Solucionadores. Ele não pode ser encadeado pois SolverHandler.UpdateSolvers é usado para atualizar a posição do objeto enquanto ele está sendo posicionado.

    • Propriedades do Toque para Posicionar:
      • Auto Start: se verdadeiro, o solucionador do Toque para Posicionar começará a controlar a posição do objeto de jogo a ser posicionado. O objeto começará imediatamente a seguir o TrackedTargetType (Cabeça ou Raio do Controlador). Esse valor deve ser modificado antes que Start() seja invocado para ter efeito.
      • Default Placement Distance: a distância padrão (em metros) que um objeto será posicionado em relação ao trackedTargetType para frente no SolverHandler. Se o raio não atingir a superfície, o objeto do jogo será posicionado na distância padrão.
      • Max Raycast Distance: a distância máxima (metros) para o raio com base na origem 'TrackedTargetType'. Esse raycast procura uma superfície para posicionar um objeto selecionado.
      • UseDefaultSurfaceNormalOffset: essa propriedade é true por padrão. Ela garante que o objeto que está sendo posicionado esteja alinhado em uma superfície. Se essa propriedade for verdadeira, o deslocamento normal da superfície padrão será aplicado em vez de qualquer valor especificado para a propriedade SurfaceNormalOffset. Se falso, o valor de SurfaceNormalOffset será aplicado. O deslocamento normal da superfície padrão são as extensão do colisor ao longo do eixo z.
      • Surface Normal Offset: a distância entre o centro do objeto do jogo a ser posicionado e uma superfície ao longo da superfície normal, quando o raio atinge uma superfície. Essa propriedade só será aplicada a um objeto se UseDefaultSurfaceNormalOffset for falso.
      • Keep Orientation Vertical: se verdadeiro, o objeto de jogo a ser posicionado permanecerá na vertical e alinhado com Vector3.up.
      • Rotate According to Surface: se falso, o objeto do jogo a ser posicionado não alterará sua rotação de acordo com a superfície atingida. O objeto ficará voltado para a câmera enquanto IsBeingPlaced for verdadeiro.
      • Magnetic Surfaces: uma matriz de LayerMasks a ser executada da prioridade mais alta para a mais baixa. A primeira máscara de camada a fornecer um clique de raycast será usada para os cálculos de posição.
      • Debug Enabled: se verdadeiro e no Editor do Unity, o clique de raycast normal será desenhado em amarelo. A depuração habilitada é útil quando RotateAccordingToSurface for verdadeiro, pois ela desenha a superfície atingida normal, o que explica visualmente por que o objeto é definido em sua orientação atual.
      • On Placing Started: esse evento é disparado uma vez quando o objeto de jogo a ser posicionado é selecionado.
      • On Placing Stopped: esse evento é disparado uma vez quando o objeto de jogo a ser posicionado tem a seleção cancelada.
  3. Testando o comportamento do Toque para Posicionar no editor

    • Pressione executar e segure a barra de espaço para mostrar uma mão de simulação de entrada.
    • Mova a mão até que o cubo esteja em foco e simule um clique com a mão de simulação de entrada clicando com o botão esquerdo do mouse.
      • Se os colisores não estiverem presentes na cena, o objeto seguirá TrackedTargetType o no Default Placement Distance definido.
    • O objeto seguirá o movimento de TrackedTargetType após a seleção. Para simular o movimento da cabeça no editor, pressione as teclas WASD. Altere a rotação da cabeça clicando no botão direito do mouse e segurando-o.
    • Para parar de posicionar o objeto, clique novamente. O objeto não precisa estar em foco para o clique de parar posicionamento. O foco só é necessário para o clique inicial que inicia o processo de posicionamento.