Toque no lugar

TapToPlace

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

Usando toque para colocar

  1. Preparar a cena

    • Criar uma nova cena de unidade
    • Adicione MRTK à cena navegando para o Conjunto de Ferramentas de Realidade MistaAdicionar à Cena e Configurar

    Nota

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

    • Adicione um cubo à cena e altere a balança para 0,2 e altere a posição para (0, 0, 0.7).
  2. Prenda o toque ao lugar a um objeto de jogo com um colisor

    TapToPlaceInspector

    • Quando o componente Tap to Place for adicionado, um Solver Handler também será ligado. Toque na Place deriva da classe Solver que requer um Solver Handler. A posição de um objeto Tap to Place é calculada em relação ao TrackedTargetType interior do Solver Handler. Por predefinição, a cabeça é a TrackedTargetType , ou seja, quando a cabeça se move, o objeto segue-o se for selecionado. O TrackedTargetType controlador também pode ser definido para o Controlador Ray, que tem o objeto a seguir o controlador. O primeiro grupo de imóveis no inspetor tap to Place são as Propriedades Solver Comuns.

    Importante

    Toque no Local é um Solver sozinho e não pode ser acorrentado com outros Solvers. Não pode ser acorrentado porque solverHandler.UpdateSolvers é utilizado para atualizar a posição do objeto enquanto este está a ser colocado.

    • Toque em Place Properties:
      • Auto Start: Se for verdade, o solucionador tap to Place começará a controlar a posição do objeto de jogo a colocar. O objeto começará imediatamente a seguir o TrackedTargetType (Head or Controller Ray). Este valor deve ser modificado antes de iniciar() é invocado para ter qualquer efeito.
      • Default Placement Distance: A distância padrão (em metros) será colocada em relação ao TrackedTargetType para a frente no SolverHandler. O objeto do jogo será colocado à distância de colocação padrão se uma superfície não for atingida pelo raycast.
      • Max Raycast Distance: A distância máxima (metros) para o raycast com base na origem 'TrackedTargetType'. Este raio procura uma superfície para colocar um objeto selecionado.
      • UseDefaultSurfaceNormalOffset: Esta propriedade é verdadeira por padrão, garante que o objeto colocado está alinhado numa superfície. Se esta propriedade for verdadeira, o offset normal de superfície padrão será aplicado em vez de qualquer valor especificado para a SurfaceNormalOffset propriedade. Se for falso, o valor para SurfaceNormalOffset será aplicado. A compensação normal da superfície padrão é a extensão do colisor ao longo do eixo z.
      • Surface Normal Offset: A distância entre o centro do objeto do jogo para colocar e uma superfície ao longo da superfície normal, se o raio bater numa superfície. Esta propriedade só é aplicada a um objeto se UseDefaultSurfaceNormalOffset for falsa.
      • Keep Orientation Vertical: Se for verdade, o objeto de jogo a colocar permanecerá na vertical e em linha com Vetor3.up.
      • Rotate According to Surface: Se for falso, o objeto do jogo a colocar não alterará a sua rotação de acordo com o impacto superficial. O objeto permanecerá virado para a câmara enquanto o IsBeingPlaced é verdadeiro.
      • Magnetic Surfaces: Uma variedade de LayerMasks para executar da maior a menor prioridade. A máscara de primeira camada para fornecer um bate-raios será usada para cálculos de posição.
      • Debug Enabled: Se for verdade e no Editor de Unidade, o normal do bate-raios será desenhado em amarelo. Debug ativado é útil quando RotateAccordingToSurface é verdade porque desenha o normal do impacto superficial que explica visualmente por que o objeto é definido na sua orientação atual.
      • On Placing Started: Este evento é desencadeado uma vez quando o objeto do jogo para colocar é selecionado.
      • On Placing Stopped: Este evento é desencadeado uma vez quando o objeto de jogo para colocar não é selecionado, colocado.
  3. Testar o comportamento da Tap to Place no editor

    • Pressione a reprodução e segure a barra espacial para mostrar uma mão de simulação de entrada.
    • Mova a mão até que o cubo esteja em foco e simular um clique com a mão de simulação de entrada clicando com o rato esquerdo.
      • Se os colisores não estiverem presentes na cena, o objeto seguirá TrackedTargetType o no definido Default Placement Distance .
    • O objeto seguirá o movimento da TrackedTargetType seleção posterior. Para simular o movimento da cabeça no editor, prima as teclas WASD. Mude 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 focado para o clique de colocação de stop. O foco só é necessário para o clique inicial que inicia o processo de colocação.
    TrackedTargetType: Cabeça (Padrão) TrackedTargetType: Controlador Ray
    Toque para colocar o raio de controlo da cabeça da simulação de entrada Toque para colocar o controlador de simulação de entrada Ray 2

Toque para colocar code configurabilidade

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

  1. Criar um objeto de jogo vazio

  2. Crie e anexe o seguinte roteiro 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, pressione a tecla U para começar a colocar o cubo

  4. Pressione a tecla I para parar a colocação

Toque na cena do exemplo do lugar

A cena do exemplo toque para colocar é composta por 4 objetos placeveis, cada um com uma configuração diferente. A cena do exemplo contém paredes para mostrar o comportamento de colocação da superfície que são desativadas por padrã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/Demos/Solvers/Scenes/TapToPlaceExample.unitity

Toque para colocar exemplo

Ver também