Toque para colocar — MRTK2
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
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).
Anexar Toque ao Local a um objeto de jogo com um colisor
- 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 é oTrackedTargetType
, ou seja, quando a cabeça se move, o objeto segue se estiver selecionado. OTrackedTargetType
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 aSurfaceNormalOffset
propriedade. Se for falso, o valor paraSurfaceNormalOffset
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 seUseDefaultSurfaceNormalOffset
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 quandoRotateAccordingToSurface
é 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.
- 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
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 definidoDefault Placement Distance
.
- Se os colisores não estiverem presentes na cena, o objeto seguirá o
- 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 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.
Criar um objeto de jogo vazio
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(); } } }
No modo de reprodução, prima a tecla U para começar a colocar o cubo
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