Toque para colocar — MRTK2

TapToPlace

Toque em Colocar é um componente de interação distante que é utilizado para colocar um objeto de jogo na superfície. Este componente é útil para colocar objetos numa malha espacial. Toque em Colocar utiliza uma combinação de dois cliques e movimento de cabeça para colocar um objeto. Um clique para iniciar o posicionamento, movimento da cabeça para controlar a posição do objeto e um clique para colocar o objeto na cena.

Utilizar a opção Tocar no Local

  1. Configurar a cena

    • Criar uma nova cena de unidade
    • Adicione MRTK à cena ao navegar para o Mixed Reality Toolkit>Adicionar à Cena e Configurar

    Nota

    Toque em Colocar utiliza cliques impulsionados pelo Sistema de Entrada MRTK, mas também pode ser controlado sem cliques, consulte a secção Toque em Colocar Código Configurabilidade abaixo.

    • Adicione um cubo à cena e altere a escala para 0,2 e altere a posição para (0, 0, 0,7).
  2. Anexar Toque ao Local a um objeto de jogo com um colisor

    TapToPlaceInspector

    • Quando o componente Toque em Local for adicionado, também será anexado um Processador do Solver. Toque em Para Colocar deriva da classe Solver que requer um Processador do Solver. A posição de um objeto Toque para Colocar é calculada relativamente ao TrackedTargetType no Processador do Solver. Por predefinição, a Cabeça é o TrackedTargetType, ou seja, quando a cabeça se move, o objeto segue se estiver selecionado. O TrackedTargetType também pode ser definido como Controller Ray, que tem o objeto a seguir ao controlador. O primeiro grupo de propriedades no inspetor Tocar para Colocar são as Propriedades comuns do Solver.

    Importante

    Toque em Colocar é um Solver autónomo e não pode ser acorrentado com outros Solvadores. Não é possível encadeá-lo porque SolverHandler.UpdateSolvers é utilizado para atualizar a posição do objeto enquanto está a ser colocado.

    • Toque em Colocar Propriedades:
      • Auto Start: Se for verdadeiro, o solver Toque para Colocar começará a controlar a posição do objeto de jogo a ser colocado. O objeto começará imediatamente a seguir o TrackedTargetType (Head ou Controller Ray). Este valor tem de ser modificado antes de Iniciar() ser invocado para ter qualquer efeito.
      • Default Placement Distance: a distância predefinida (em metros) que um objeto será colocado em relação ao trackedTargetType para a frente no SolverHandler. O objeto de jogo será colocado à distância de colocação predefinida se uma superfície não for atingida pelo raycast.
      • Max Raycast Distance: a distância máxima (medidores) para o raycast com base na origem "TrackedTargetType". Este raycast procura uma superfície para colocar um objeto selecionado.
      • UseDefaultSurfaceNormalOffset: esta propriedade é verdadeira por predefinição, garante que o objeto que está a ser colocado está alinhado numa superfície. Se esta propriedade for verdadeira, o desvio normal da superfície predefinido será aplicado em vez de qualquer valor especificado para a SurfaceNormalOffset propriedade. Se for falso, o valor para SurfaceNormalOffset será aplicado. O deslocamento normal da superfície predefinido é a extensão do colisor ao longo do eixo z.
      • Surface Normal Offset: a distância entre o centro do objeto de jogo a colocar e uma superfície ao longo da superfície normal, se o raycast atingir uma superfície. Esta propriedade só é aplicada a um objeto se UseDefaultSurfaceNormalOffset for falsa.
      • Keep Orientation Vertical: Se for verdadeiro, o objeto de jogo a colocar permanecerá vertical e em linha com Vector3.up.
      • Rotate According to Surface: Se for falso, o objeto de jogo a colocar não alterará a rotação de acordo com o toque da superfície. O objeto permanecerá virado para a câmara enquanto IsBeingPlaced é verdadeiro.
      • Magnetic Surfaces: uma matriz de LayerMasks a executar da prioridade mais alta para a mais baixa. A máscara de primeira camada para fornecer um ataque de raycast será utilizada para cálculos de posição.
      • Debug Enabled: Se for verdadeiro e no Editor do Unity, o normal do ataque de raycast será desenhado a amarelo. A depuração ativada é útil quando RotateAccordingToSurface é verdadeira porque desenha o normal do impacto da superfície, o que explica visualmente porque é que o objeto está definido na sua orientação atual.
      • On Placing Started: este evento é acionado uma vez quando o objeto de jogo a colocar estiver selecionado.
      • On Placing Stopped: este evento é acionado uma vez quando o objeto de jogo a colocar não está selecionado, colocado.
  3. Testar o comportamento de Toque para Colocar no editor

    • Prima reproduzir sem soltar a barra de espaço para mostrar uma mão de simulação de entrada.
    • Mova a mão até o cubo estar em foco e simular um clique com a mão de simulação de entrada ao clicar com o rato esquerdo.
      • Se os colisores não estiverem presentes na cena, o objeto seguirá o TrackedTargetType no definido Default Placement Distance.
    • O objeto seguirá o movimento da TrackedTargetType seleção após a seleção. Para simular o movimento da cabeça no editor, prima as teclas WASD. Altere a rotação da cabeça clicando e segurando o rato direito.
    • Para parar de colocar o objeto, clique novamente. O objeto não precisa de estar em foco para o clique de colocação de paragem. O foco só é necessário para o clique inicial que inicia o processo de colocação.
    TrackedTargetType: Cabeça (Predefinição) TrackedTargetType: Raio do Controlador
    Toque em Para Colocar Raio de Controlo de Cabeça de Simulação de Entrada Toque em Para Colocar Controlador de Simulação de Entrada Ray 2

Toque em Colocar Configurabilidade do Código

Toque em Colocar temporização de seleção de objetos também pode ser controlado através StartPlacement() de e StopPlacement() em vez de exigir um evento de clique. Esta capacidade é útil para escrever testes e fornece um método alternativo para colocar um objeto no editor sem utilizar o Sistema de Entrada MRTK.

  1. Criar um objeto de jogo vazio

  2. Criar e anexar o seguinte script de exemplo ao objeto de jogo vazio

    using UnityEngine;
    using Microsoft.MixedReality.Toolkit.Utilities.Solvers;
    
    public class TapToPlaceInputExample : MonoBehaviour
    {
        private GameObject cube;
        private TapToPlace tapToPlace;
    
        void Start()
        {
            cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.transform.localScale = Vector3.one * 0.2f;
            cube.transform.position = Vector3.forward * 0.7f;
    
            tapToPlace = cube.AddComponent<TapToPlace>();
        }
    
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.U))
            {
                tapToPlace.StartPlacement();
            }
            if (Input.GetKeyDown(KeyCode.I))
            {
                tapToPlace.StopPlacement();
            }
        }
    }
    
  3. No modo de reprodução, prima a tecla U para começar a colocar o cubo

  4. Prima a tecla I para parar o posicionamento

Toque em Colocar Cena de Exemplo

A cena de exemplo Tocar para Colocar consiste em 4 objetos placeable, cada um com uma configuração diferente. A cena de exemplo contém paredes para mostrar o comportamento de colocação da superfície que estão desativados por predefinição na hierarquia. A cena de exemplo pode ser encontrada no pacote de unidade Microsoft.MixedReality.Toolkit.Unity.Examples encontrado na Página de Lançamento. A localização da cena é : MRTK. Exemplos/Demonstrações/Solvers/Scenes/TapToPlaceExample.unity

Toque em Para Colocar Exemplo

Ver também